/[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 1055 by bh, Tue May 27 10:38:25 2003 UTC revision 1239 by jonathan, Wed Jun 18 15:41:11 2003 UTC
# Line 1  Line 1 
1    2003-06-18  Jonathan Coles   <[email protected]>
2    
3            * setup.py: Fix a few problems that occured under Windows.
4    
5    2003-06-18  Jonathan Coles   <[email protected]>
6    
7            When Thuban loaded the map was redrawn twice because the
8            legend was being opened after the mainwindow was created
9            and not during its creation. This meant the map was drawn
10            initially and then had to be redrawn when the legend
11            caused the display to change. Now the legend is opened
12            in the mainwindow constructor which resolves this issue.
13    
14            Also, although we were checking for the existence of
15            gdal and gdalwarp modules, the gdalwarp extension was
16            still being compiled (which may fail if the system doesn't
17            have gdal installed). the build_ext command to setup.py
18            now accepts the flags --with-gdal and --without-gdal.
19            If --without-gdal is specified setup.py will try to
20            use the gdal parameters specified by gdal-config. Under
21            windows, those parameters have to be set in setup.py
22            as with proj4 an wxWindows.
23    
24            * setup.py: Use a list instead of seperate variables for
25            extension parameters so we can create a generic function
26            that runs an appropriate *-config script.
27            (run_cs_script): Renamed from run_wx_script and modified
28            to accept a second argument which is a list of lists to
29            be filled in by the values returned from running the command.
30            (thuban_build_ext): New. Extends the build_ext command and
31            provides the options --with-gdal/--without-gdal which then
32            optionally includes the gdalwarp extension.
33    
34            * Thuban/Model/resource.py: First check if we can import
35            the gdalwarp Thuban extension before checking for gdal.
36            Also added some comments.
37            
38            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
39            the map is None which may be the case if none has been loaded
40            yet.
41    
42            * Thuban/UI/main.py (main): Remove call to ShowLegend.
43    
44            * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
45    
46            * Thuban/UI/renderer.py: Check for gdal support before importing
47            gdalwarp.
48            (MapRenderer.render_map): Only try to optimize if we have gdal
49            support otherwise nothing will get drawn.
50    
51            * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
52            during startup before a map has been created. Check if map is None
53            before using it and do nothing if it is.
54    
55    2003-06-17  Jonathan Coles   <[email protected]>
56    
57            Fix the problem with raster layers under Windows that caused
58            Thuban to crash. The view should respond to layer projection
59            changed events to update the display. Changes to a projection
60            should not cause the map to be set to full extent.
61            
62            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
63            current_map_proj to remember the current map projection so that
64            when the projection changes we know what the previous projection
65            was.
66            (MapCanvas.SetMap): Unsubscribe and subscribe to
67            LAYER_PROJECTION_CHANGED events.
68            (MapCanvas.projection_changed): Split into two methods that respond
69            to map and layer projection changes.
70            (MapCanvas.map_projection_changed): New. Takes the current view and
71            projects it using the new projection. This does not cause the
72            map to be redrawn at full extent.
73            (MapCanvas.layer_projection_changed): New. Cause a redraw which
74            will draw each layer in its new projection.
75            
76            * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
77            VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
78            under Windows.
79            
80            * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
81            to twice sizeof(void*) because there are two digits for each
82            hex byte.
83    
84    2003-06-16  Bernhard Herzog  <[email protected]>
85    
86            Update to the layer interface: Direct access to the table,
87            shapetable, shapefile and filename attributes is now actively
88            deprecated by issuing deprecation warnings for all places where
89            this happens.
90    
91            * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
92            to the instance variables table, shapetable, shapefile and
93            filename via __getattr__ so that we can issue a deprecation
94            warning.
95            (Layer.SetShapeStore): Don't set the deprecated instance variables
96            any more
97            (Layer.SetShapeStore): Don't use deprecated layer instance
98            variables
99            (Layer.Destroy): No need to explicitly remove the instance
100            variables any more
101            (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
102            instance variables
103    
104            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
105            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
106            (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
107            use deprecated layer instance variables
108    
109            * Thuban/UI/classifier.py (Classifier.__init__): Don't use
110            deprecated layer instance variables
111    
112            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
113            (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
114            instance variables
115    
116            * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
117            deprecated layer instance variables
118    
119            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
120            deprecated layer instance variables
121    
122            * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
123            deprecated layer instance variables
124    
125            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
126            (MapRenderer.polygon_render_param): Don't use deprecated layer instance
127            variables
128    
129            * test/runtests.py (main): Turn Thuban's deprecation warnings into
130            errors so that they're cought by the tests
131    
132            * test/test_load.py (TestSingleLayer.test): Don't use deprecated
133            layer instance variables
134    
135    2003-06-16  Jonathan Coles   <[email protected]>
136    
137            Fix a problem under Windows whereby if the user double-clicks on a
138            layer in the legend that tree item will expand or collapse as well
139            as open the layer properties dialog. The state of the tree item
140            should not be affected.
141    
142            * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
143            preventExpandCollapse and subscribe to expanding and collapsing
144            events.
145            (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
146            collapsing events and will veto the event if it has been triggered
147            by the user double clicking on a layer.
148            (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
149            that an expanding/collapsing event should be vetoed.
150    
151    2003-06-13  Bernhard Herzog  <[email protected]>
152    
153            * Thuban/UI/classifier.py (Classifier.OnClose)
154            (Classifier.map_layers_removed)
155            (Classifier.layer_shapestore_replaced): Unsubscribe the messages
156            in OnClose and not in map_layers_removed or
157            layer_shapestore_replaced to make sure it always happens when the
158            dialog is closed
159    
160    2003-06-13  Jonathan Coles   <[email protected]>
161    
162            This puts back a fix for Windows where a panel is needed so that
163            the background of the table view appears correctly.
164    
165            * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
166            object that can be used by derived classes to place any
167            controls (including the grid) onto.
168            (QueryTableFrame.__init__): Use the panel as the parent window
169            for all the controls. Reparent the grid so that the panel is
170            the parent. Call UpdateStatusText() to correctly initialize
171            the status bar.
172    
173    2003-06-13  Jonathan Coles   <[email protected]>
174    
175            * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
176            from wxFrame (as opposed to wxDialog like the other classes)
177            but otherwise behaves like the other classes. This is needed
178            for the TableView which isn't really a dialog and needs to
179            have a status bar and control buttons.
180    
181            * Thuban/UI/tableview.py (TableGrid.__init__): Create an
182            instance variable to keep track of how many rows are selected.
183            Subscribe once to the the events we are interested in.
184            (ThubanGrid.OnRangeSelect): Only handle event if event handling
185            hasn't been turned off.
186            (ThubanGrid.OnSelectCell): Only handle event if event handling
187            hasn't been turned off.
188            (ThubanGrid.ToggleEventListeners): Rather than subscribe None
189            as an event listener (which changes the event handler stack)
190            simply set an instance variable to False. This is checked in
191            the event handlers.
192            (ThubanGrid.GetNumberSelected): Return the number of currently
193            selected rows.
194            (TableFrame): Inherit from ThubanFrame so we can have a
195            status bar and control buttons.
196            (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
197            Explicitly set which items are selected in the operator choice and
198            action choice so there is always a valid selection. Fixes RTbug #1941.
199            Subscribe to grid cell selection events so we can update the
200            status bar.
201            (QueryTableFrame.UpdateStatusText): Update the status bar with
202            how many rows are in the grid, how many columns, and how many
203            rows are selected.
204            (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
205            Call UpdateStatusText when cells are (de)selected.
206            (QueryTableFrame.OnQuery): Use the string value in the value
207            combo if either the selected item index is 0 or if the string
208            cannot be found in the predefined list (this happens if the
209            user changes the text). Fixes RTbug #1940.
210            Only turn off the grid event listeners if there a query comes
211            back with a none empty list of ids. in the case that the list
212            is empty this causes a grid.ClearSelection() call to actually
213            clear the grid selection which causes the selected items in
214            the map to be deselected. Fixes RTbug #1939.
215    
216            * test/test_save.py (XMLWriterTest.Encode): Check return values.
217            Fixes RTbug #1851.
218    
219    2003-06-13  Bernhard Herzog  <[email protected]>
220    
221            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
222            self.selected_shape with the current selection to make sure the
223            contents of the dialog are up to date when it's shown for the
224            first time.
225            The dialog used to work without this by luck. The recent fix to
226            the connector module 'broke' a 'feature' the identify view was
227            relying on, i.e that subscribing to a message in response to
228            receiving a message of that type would mean that the new
229            subscriber would also be called for the same message.
230            
231    2003-06-12  Jonathan Coles   <[email protected]>
232    
233            * extensions/thuban/gdalwarp.cpp: Removed debug printing as
234            the image is rendered. Fixes RTbug #1937.
235    
236    2003-06-12  Jonathan Coles   <[email protected]>
237    
238            * Thuban/Lib/fileutil.py: As is done under Windows, create the
239            user directory if it doesn't exist on a posix system.
240            Fixes RTbug #1815.
241    
242            * Thuban/Model/resource.py (get_user_proj_files): Moved the
243            called to get_application_dir here, so that the directory
244            will only be called if this method is invoked.
245    
246            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
247            the projfilepath if no projection is selected.
248    
249    2003-06-12  Jonathan Coles   <[email protected]>
250    
251            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
252            the scalebar if the current map has no projection set.
253    
254            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
255            projfilepath label to just the basename of the projection file
256            rather than include the entire path.
257    
258            * Thuban/Model/resource.py: Fix missed proj functions that
259            needed to be renamed.
260    
261    2003-06-12  Jonathan Coles   <[email protected]>
262    
263            * Thuban/Model/classification.py: Removed assert statements that
264            tested if the variable was an instance of Color.
265    
266            * Thuban/Model/color.py (Color): Remove commented code that isn't
267            used.
268            (Transparent): Renamed from NoColor. Doesn't inherit from Color.
269            Fixes RTbug #1835.
270            (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
271            Needed now that the class doesn't inherit from Color.
272    
273    2003-06-12  Jonathan Coles   <[email protected]>
274    
275            * test/test_save.py (XMLWriterTest.testEncode): Explicitly
276            check unicode strings.
277    
278            * test/test_layer.py: Check for existence of gdal.
279    
280    2003-06-12  Jonathan Coles   <[email protected]>
281        
282            * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
283            that was in load.py
284    
285            * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
286            that was in save.py
287    
288    2003-06-12  Jonathan Coles   <[email protected]>
289    
290            This is largely a collection of bug fixes. We also handle the
291            case where gdal is not on the system. The XMLReader and XMLWriter
292            classes were moved into there own files to resolve some circular
293            import references and because they shouldn't really be in the
294            file that is dediciated to reading/writing session files since
295            they are also used elsewhere.
296    
297            * Thuban/Model/classgen.py: Renamed functions to follow the
298            function_names_with_underscores style. Fixes RTbug #1903.
299            (calculate_quantiles): Raise ValueError if 'percents' is invalid.
300    
301            * Thuban/Model/layer.py: Import gdal only if it available.
302            (RasterLayer): Handle the case where the gdal library is unavailable.
303            Addresses RTbug #1877.
304    
305            * Thuban/Model/load.py (XMLReader): Moved into seperate file
306            xmlreader.py.
307    
308    2003-06-12  Jonathan Coles   <[email protected]>
309    
310            This is largely a collection of bug fixes. We also handle the
311            case where gdal is not on the system. The XMLReader and XMLWriter
312            classes were moved into there own files to resolve some circular
313            import references and because they shouldn't really be in the
314            file that is dediciated to reading/writing session files since
315            they are also used elsewhere.
316    
317            * Thuban/Model/classgen.py: Renamed functions to follow the
318            function_names_with_underscores style. Fixes RTbug #1903.
319            (calculate_quantiles): Raise ValueError if 'percents' is invalid.
320    
321            * Thuban/Model/layer.py: Import gdal only if it available.
322            (RasterLayer): Handle the case where the gdal library is unavailable.
323            Addresses RTbug #1877.
324    
325            * Thuban/Model/load.py (XMLReader): Moved into seperate file
326            xmlreader.py.
327    
328            * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
329            file xmlwriter.py.
330    
331            * Thuban/Model/resource.py: Renamed functions to following the
332            function_names_with_underscores style.
333            (has_gdal_support): New function that returns true if the gdal
334            library is available. Addresses RTbug #1877.
335    
336            * Thuban/UI/application.py (ThubanApplication.OpenSession):
337            Display a message box if the gdal library is not available, but
338            only if there are any layers that would use it. Addresses RTbug #1877.
339    
340            * Thuban/UI/classgen.py: Use renamed projection resource functions.
341            (GenUniformPanel.__CalcStepping): Fix a slight discrepency
342            when using integers versus floats.
343    
344            * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
345            determine if the "Add Image Layer" menu option should be
346            greyed out or not. Addresses RTbug #1877.
347    
348            * Thuban/UI/projdialog.py: Use renamed projection resource functions.
349    
350            * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
351            optimize if a raster layer is visible. Fixes RTbug #1931.
352            Only draw the raster layer if the gdal library is available.
353            Addresses RTbug #1877.
354    
355            * test/test_classgen.py: Add tests for generate_singletons,
356            generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
357            (test_calculate_quantiles): Fix some tests to catch the new
358            ValueError that is raised.
359    
360            * test/test_proj.py: Use renamed projection resource functions.
361    
362            * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
363            test for saving classified layers. Fixes RTbug #1902.
364            (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
365    
366    2003-06-12  Jan-Oliver Wagner <[email protected]>
367    
368            Fix for http://intevation.de/rt/webrt?serial_num=1900.
369    
370            * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
371    
372            * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
373            multiplechoicedialog.py rather than from the wxPython library.
374    
375    2003-06-11  Frank Koormann  <[email protected]>
376    
377            * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
378            update.
379    
380    2003-06-11  Frank Koormann  <[email protected]>
381    
382            * Thuban/Lib/fileutil.py (get_application_dir): New function to
383            determine the absolute .thuban/thuban directory under
384            "posix" (os.expanduser) and "nt" (read AppData registry key).
385    
386            * Thuban/Model/resource.py: Use get_application_dir
387    
388            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
389            Use get_application_dir.
390    
391    2003-06-10  Bernhard Herzog  <[email protected]>
392    
393            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
394            the messages MAP_LAYERS_REMOVED messages
395            (LayerTableFrame.OnClose): Unsubscribe from it.
396            (LayerTableFrame.map_layers_removed): New. Receiver for
397            MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
398            dialog is showing is removed.
399    
400    2003-06-10  Bernhard Herzog  <[email protected]>
401    
402            * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
403            of the receivers list so that unsubscribing in a receiver doesn't
404            modify it while iterating over it.
405    
406            * test/test_connector.py
407            (ConnectorTest.test_disconnect_in_receiver): New. Test whether
408            unsubscribing in a receiver works correctly. See docstring for
409            details
410    
411    2003-06-10  Bernhard Herzog  <[email protected]>
412    
413            * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
414            message.
415    
416            * Thuban/Model/layer.py (Layer.SetShapeStore): Send
417            LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
418            LAYER_CHANGED will still be sent if the classification changes.
419    
420            * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
421            parameter so we can subscribe to some of its messages
422            (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
423            and the layer's LAYER_SHAPESTORE_REPLACED
424            (Classifier.unsubscribe_messages): New. Unsubscribe from message
425            subscribed to in __init__
426            (Classifier.map_layers_removed)
427            (Classifier.layer_shapestore_replaced): receivers for the messages
428            subscribed to in __init__. Unsubscribe and close the dialog
429    
430            * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
431            the map to the Classifier dialog
432    
433            * test/test_layer.py (SetShapeStoreTests): Derive from
434            SubscriberMixin as well so we can test messages
435            (SetShapeStoreTests.setUp): Subscribe to some of the layer's
436            messages
437            (SetShapeStoreTests.tearDown): Clear the messages again
438            (SetShapeStoreTests.test_sanity): Expand the doc-string and check
439            for the modified flag too
440            (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
441            to check whether SetShapeStore sets the modified flag
442            (SetShapeStoreTests.test_set_shape_store_different_field_name)
443            (SetShapeStoreTests.test_set_shape_store_same_field)
444            (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
445            Add tests for the messages. This checks both the new
446            LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
447    
448    2003-06-06  Jan-Oliver Wagner <[email protected]>
449    
450            * Thuban/UI/mainwindow.py: Improved and partly added help texts for
451            the menu items.
452    
453    2003-06-05  Frank Koormann  <[email protected]>
454    
455            * Thuban/UI/identifyview.py (IdentifyView.__init__):
456            Layout reimplemented without panel. Make life easier to fit the list
457            in the dialog.
458    
459    2003-06-05  Frank Koormann  <[email protected]>
460    
461            * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
462            once on initialisation (Former implementation resulted in multiple
463            entries for each projection).
464            (ProjFrame.__FillAvailList): selectProj as second optional parameter,
465            if set, select the projection found under the specified name. This
466            overwrites any other selection estimate.
467            Removed projchoice filling from this method.
468            (ProjFrame._OnSave, ProjFrame._OnAddToList):
469            Updated call of ProjFrame.__FillAvailList
470            (LCCPanel._DoLayout): Moved parameter controls in more common order.
471    
472            * Resources/Projections/defaults.proj: Extended defaults representing
473            various common European projections.
474    
475    2003-06-05  Frank Koormann  <[email protected]>
476    
477            * Thuban/UI/identifyview.py (IdentifyView.__init__):
478            Use ListCtrl instead of GridCtrl
479    
480            * Thuban/Model/resource.py:
481            Guess location of .thuban directory from tempdir parent directory.
482    
483            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
484            Guess location of .thuban directory from tempdir parent directory.
485    
486    2003-06-04  Bernhard Herzog  <[email protected]>
487    
488            Do not cache the values returned by the tree widget's
489            GetFirstChild and GetNextChild methods because it led to lots of
490            segfaults. The new way requires more brute force but is more
491            reliable.
492    
493            * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
494            variable layer2id
495            (LegendTree.find_layer): New method to do with brute force what
496            layer2id tried to accomplish
497            (LegendTree._OnMsgLayerChanged)
498            (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
499            Use find_layer instead of layer2id
500            (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
501            update layer2id anymore
502            (LegendTree._OnMsgMapLayersRemoved)
503            (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
504    
505    2003-06-03  Thomas Koester  <[email protected]>
506    
507            * Thuban/Model/classgen.py (GenQuantiles0): New function.
508    
509    2003-06-02  Bernhard Herzog  <[email protected]>
510    
511            * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
512            New commands.
513            (main_menu): Add the new commands.
514            (MainWindow.TableRename): New. Implementation of the table_rename
515            command.
516            (MainWindow.RenameLayer): New. Implementation of the layer_rename
517            command.
518    
519            * Thuban/Model/session.py (Session.AddTable): call self.changed to
520            set the modified flag
521    
522            * test/test_session.py (TestSessionSimple.test_add_table): Test
523            whether the modified flag is set properly
524    
525            * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
526            instead of issue so that the modified flags get updated.
527    
528            * test/test_base.py (SomeTitledObject): Derive from Modifiable
529            instead of Publisher to reflect reality better and to accomodate
530            the fact that SetTitle now calls changed instead of issue
531    
532    2003-06-02  Bernhard Herzog  <[email protected]>
533    
534            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
535            acquisition has to happen before the try in a try-finally.
536    
537    2003-06-02  Bernhard Herzog  <[email protected]>
538    
539            * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
540            possible that a layer is removed that is not currently selected in
541            the legend so don't check for this.
542    
543    2003-05-30  Bernhard Herzog  <[email protected]>
544    
545            * Thuban/Model/layer.py (Layer.Destroy): Set all instance
546            variables to None that have direct or indirect references to
547            shapefiles or dbf files to make sure that they do go away and the
548            files are closed.
549    
550    2003-05-30  Bernhard Herzog  <[email protected]>
551    
552            * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
553            availImgListIndices when a new image list is created
554            
555    2003-05-30  Bernhard Herzog  <[email protected]>
556    
557            * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
558            changing_selection to indicate whether the LegendTree code itself
559            is currently changing the selection
560            (LegendTree.normalize_selection): New method to normalize the
561            selection by selecting the layer item even if the user clicked on
562            the classification.
563            (LegendTree._OnSelChanged): normalize the selection. This works
564            around a bug in wx which doesn't keep track of the selection
565            properly when subtrees are deleted.
566    
567    2003-05-30  Bernhard Herzog  <[email protected]>
568    
569            * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
570            maximum and minimum scale factors.
571    
572            * test/test_classgen.py (ClassGenTest.test): Update to reflect the
573            changes in classgen.py
574    
575    2003-05-30  Jonathan Coles   <[email protected]>
576    
577            * Thuban/Model/classgen.py: Remove ClassGenerator class but make
578            all the methods functions. Fixes RTBug #1903.
579    
580            * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
581            to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
582            RTBug #1907.
583    
584            * Thuban/UI/classgen.py: Use classgen functions that were part
585            of the ClassGenerator class. Put try/finally blocks around
586            code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
587            RTBug #1904.
588    
589            * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
590    
591            * Thuban/UI/legend.py: The legend was cleared and repopulated any
592            time something changed which caused some state to be lost such
593            as which children were expanded or collapsed. Fixes RTBug #1901.
594            (LegendTree._OnMsgMapLayersAdded): Add only new layers.
595            (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
596            the legend but not in the map.
597            (LegendTree.__FillTree): Move main functionality out into smaller
598            methods that can be used by other methods.
599            (LegendTree.__FillTreeLayer): Reuse old slots in the image list
600            if they are available.
601            (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
602            that we override the wxTreeCtrl method. Iterate over children
603            and call __RemoveLayer.
604            (LegendTree.__AddLayer): New. Add a new layer to the legend.
605            (LegendTree.__RemoveLayer): Remove a layer from the legend.
606            (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
607            Should only be called with the id of a layer branch.
608            (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
609            Returns the root item or creates one if necessary.
610    
611            * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
612            ProjectRasterFile with tuple arguments instead of strings.
613    
614            * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
615            with try/finally. Fixes RTBug #1904.
616    
617            * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
618            with try/finally. Fixes RTBug #1904.
619            (MapCanvas.FitSelectedToWindow): If a single point is selected
620            simply center it on the display. Fixes RTBug #1849.
621    
622            * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
623            to be compiled as a standalone app. Now the code can only be
624            called from Python which simplifies the parameter passing.
625            (ProjectRasterFile): Handle Python arguments. Remove code that
626            checks for a destination dataset. Add more clean up code.
627    
628            * test/test_map.py (TestMapWithContents.test_raise_layer_top,
629            TestMapWithContents.test_lower_layer_bottom):
630            Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
631            Fixes RTBug #1907.
632    
633            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
634            extent to the map when the legend is toggled. Fixes RTBug #1881.
635    
636    2003-05-29  Jan-Oliver Wagner <[email protected]>
637    
638            * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
639            unsubscribes all that is subcribed in __init__.
640    
641    2003-05-28  Bernhard Herzog  <[email protected]>
642    
643            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
644            (MainWindow.CanDuplicateLayer): New methods to implement the
645            Layer/Duplicate command.
646            (layer_duplicate command): New.
647            (main_menu): Add layer_duplicate to the Layer menu.
648    
649    2003-05-28  Bernhard Herzog  <[email protected]>
650    
651            * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
652            renderer so that NULL/None values get displayed differently (by a
653            gray rectangle).
654            (TableGrid.__init__): Override the default renderers
655    
656    2003-05-28  Bernhard Herzog  <[email protected]>
657    
658            * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
659            classification to "None" if the type of the field has changed.
660    
661            * test/test_layer.py (SetShapeStoreTests): New. Class with a few
662            test for the Layer.SetShapeStore method
663    
664    2003-05-28  Jan-Oliver Wagner <[email protected]>
665    
666            * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
667            does not necessarily have a filename).
668    
669    2003-05-28  Jan-Oliver Wagner <[email protected]>
670    
671            * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
672            sort the selection list for the dialog.
673    
674    2003-05-28  Frank Koormann  <[email protected]>
675    
676            * extensions/thuban/wxproj.cpp
677            (project_point): Removed cast to int for projected point coordinates.
678            (shape_centroid): Return last point if all polygon vertices fall
679            to one point.
680    
681    2003-05-28  Bernhard Herzog  <[email protected]>
682    
683            * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
684            with layers that don't have shapestores, i.e. raster layers.
685    
686    2003-05-28  Bernhard Herzog  <[email protected]>
687    
688            * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
689            when determining the title from the filename.
690    
691            * test/test_dbf_table.py (TestDBFTable.test_title): Update to
692            reflect changes in the way the title is derived from the filename
693    
694    2003-05-28  Frank Koormann  <[email protected]>
695    
696            * Thuban/UI/mainwindow.py (MainWindow.TableShow):
697            Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
698    
699    2003-05-27  Bernhard Herzog  <[email protected]>
700    
701            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
702            delegate SelectedLayer.
703            (MainWindow.LayerUnjoinTable): Implement.
704            (_can_unjoin): New. Helper function for the sensitivity of the
705            layer/unjoin command.
706    
707            * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
708            (DerivedShapeStore.OrigShapeStore): New. Return the original
709            shapestore. Used to figure out how to unjoin.
710            (DerivedShapeStore.Shapefile): Fix a typo.
711    
712    2003-05-27  Bernhard Herzog  <[email protected]>
713    
714            * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
715            well
716            (JoinDialog.__init__): Use the layer parameter and only build the
717            left choice when a layer is given
718            (JoinDialog.OnJoin): Handle layer joins as well
719            (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
720            that the user selects the "Select..." item. The sensitivitly
721            updating is now in update_sensitivity
722            (JoinDialog.y): New method to refactor the sensitivity update of
723            the join button into its own method.
724    
725            * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
726    
727    2003-05-27  Bernhard Herzog  <[email protected]>
728    
729            * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
730            iff there are unreferenced tables in the session
731    
732    2003-05-27  Bernhard Herzog  <[email protected]>
733    
734            * Thuban/Model/messages.py (TABLE_REMOVED): New message.
735    
736            * Thuban/Model/session.py (Session.UnreferencedTables): New method
737            to return tables that are not referenced by other tables or shape
738            stores and can be removed.
739            (Session.RemoveTable): Issue a TABLE_REMOVED message after
740            removing the table
741    
742            * Thuban/UI/mainwindow.py: Remove unused imports
743            (MainWindow.TableClose): Implement.
744    
745            * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
746            messages so that the frame will be automatically closed when a new
747            session is opened or the table is removed.
748            (TableFrame.OnClose): Unsubscribe the Subscriptions made in
749            __init__
750            (TableFrame.close_on_session_replaced)
751            (TableFrame.close_on_table_removed): New. Subscribers that close
752            the window
753    
754            * test/test_session.py (TestSessionMessages.test_remove_table)
755            (TestSessionSimple.test_remove_table): Move the test to
756            TestSessionSimple and add test for the TABLE_REMOVED message
757            (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
758            (TestSessionSimple.test_unreferenced_tables) New. Test for the
759            UnreferencedTables method.
760            (UnreferencedTablesTests): New. Class with some more sophisticated
761            tests for UnreferencedTables.
762    
763    2003-05-27  Frank Koormann  <[email protected]>
764    
765            * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
766            display has some unwanted side effects. Removed again.
767    
768    2003-05-27  Frank Koormann  <[email protected]>
769    
770            * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
771    
772            * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
773    
774    2003-05-27  Jan-Oliver Wagner <[email protected]>
775    
776            * test/test_menu.py (MenuTest.test): Added test for
777            Menu.RemoveItem().
778    
779            * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
780            the menu.
781    
782    2003-05-27  Frank Koormann  <[email protected]>
783            
784            Nonmodal dialogs without parent (i.e. they can fall behind the main
785            window)
786    
787            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
788            all dialogs in the dialogs dictionary and the canvas.
789    
790            * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
791            parent, i.e. can fall behind other windows.
792            (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
793            dictionary before removing it.
794    
795            * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
796    
797            * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
798            * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
799            * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
800    
801  2003-05-27  Bernhard Herzog  <[email protected]>  2003-05-27  Bernhard Herzog  <[email protected]>
802    
803          * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a          * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a

Legend:
Removed from v.1055  
changed lines
  Added in v.1239

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26