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

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

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

revision 199 by jan, Thu Jun 20 15:25:36 2002 UTC revision 673 by jonathan, Tue Apr 15 19:17:39 2003 UTC
# Line 1  Line 1 
1  2002-06-20      Jan-Oliver Wagner <[email protected]>  2003-04-15  Jonathan Coles   <[email protected]>
2    
3            * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
4            to improve rendering performance by initializing the variables
5            that are not change each time draw_polygon_shape() is called.
6            The values are stored in a global struct draw_info.
7            (draw_polygon_shape): Removed initialization code that is
8            now in draw_polygon_init().
9    
10            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
11        drawing initialization call to draw_polygon_init()
12        (MapRenderer.draw_polygon_shape): Use new signature of
13        draw_polygon_shape.
14    
15        * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
16        weirdness by setting the range to (1, maxint).
17    
18        * Thuban/Model/classification.py (ClassGroupProperties): Make
19        instance variables private and optimize comparison operator
20        by first checking if the color references are the same.
21        (ClassGroupSingleton): Make instance variables private.
22        (ClassGroupRange): Make instance variables private.
23    
24    2003-04-15  Bernhard Herzog  <[email protected]>
25    
26            First stab at internationalized messages:
27    
28            * Thuban/__init__.py (_): Implement the translation function for
29            real using the python gettext module.
30    
31            * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
32            translate empty strings.
33    
34            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
35            Add a missing space to a warning message
36    
37            * po/README: New. Notes about the management of the translation
38            files.
39    
40            * po/Makefile: New. Makefile to help manage the translation files.
41    
42            * po/es.po: New. Spanish translation by Daniel Calvelo Aros
43    
44            * MANIFEST.in: Include the *.mo files in Resources/Locale and the
45            translations and support files in po/
46    
47            * setup.py (data_files): Add the *.mo files to the data_files too
48    
49            * README: Add note about the translations when building from CVS
50    
51    2003-04-14  Jonathan Coles   <[email protected]>
52    
53            * Thuban/UI/dock.py: Fixes some window resizing problems most
54            noticable under windows. Always assume the button bitmaps will
55            be there. Code clean up.
56            (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
57            images for the dock/undock button to the same images.
58            Work around for RTbug #1801.
59    
60            * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
61            be allowed to grow within the sizer. Fixes a bug under Windows
62            where the toolbar wasn't being drawn.
63    
64    2003-04-14  Frank Koormann   <[email protected]>
65    
66            * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
67            Updated design to try to make the button functionality more
68            transparent.
69    
70    2003-04-14  Jonathan Coles   <[email protected]>
71    
72            * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
73            finalize the intialization of the panel.
74    
75            * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
76            creation of the panel. Should be the last thing called in the
77            initializer of a subclass.
78    
79            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
80            set the current selections in the combo boxes. This is needed
81            under Windows.
82    
83            * Thuban/UI/classifier.py (Classifier.__init__): Add a top
84            level panel to the dialog so that the background colors are
85            consistent under Windows.
86    
87    2003-04-11  Jonathan Coles   <[email protected]>
88    
89            * Thuban/UI/classgen.py: Change color ramps to start at white
90            not black.
91    
92            * Thuban/UI/legend.py: Enable/disable the legend buttons when
93            the legend changes. Fixes RTbug #1793.
94    
95            * test/test_classification.py: Added test for copying of
96            classifications.
97    
98    2003-04-11  Jonathan Coles   <[email protected]>
99    
100            * Thuban/UI/resource.py: New. Centralize the loading of resources
101            such as bitmaps.
102    
103            * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
104            added images to the move buttons, added 'reverse' button.
105            (CustomRampPanel.__init__): Added images to the move buttons.
106            (GreyRamp): New. Generates a ramp from white to black.
107            (HotToColdRamp): New. Generates a ramp from cold to hot colors.
108    
109            * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
110            ID_PROPERTY_*.
111            (Classifier.__init__): Minor changes to the layout.
112            (Classifier._OnTitleChanged): Listen for when the user edits the
113            title and update the dialog's title and the layer's title.
114    
115            * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
116    
117            * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
118            (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
119            if the layer's title changes.
120    
121            * Thuban/UI/mainwindow.py: Added new menu item and associated code
122            to open a dialog to rename the map.
123            (MainWindow): Use new resource class to import bitmaps.
124    
125    2003-04-11  Jonathan Coles   <[email protected]>
126    
127            * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
128            Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
129            Resources/Bitmaps/group_use_none.xpm,
130            Resources/Bitmaps/group_use_not.xpm,
131            Resources/Bitmaps/hide_layer.xpm,
132            Resources/Bitmaps/layer_properties.xpm,
133            Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
134            Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
135            New.
136    
137    2003-04-10  Jonathan Coles   <[email protected]>
138    
139            * Thuban/Model/classification.py: (ClassGroupRange.__init__):
140            Should pass group to ClassGroup constructor.
141    
142    2003-04-10  Jonathan Coles   <[email protected]>
143    
144            * Thuban/Model/classification.py: (ClassGroup): Move all the common
145            methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
146            here. Implement SetVisible(), IsVisible().
147            (ClassGroup.__init__): Add group parameter which acts as a copy
148            constructor.
149    
150            * Thuban/UI/classifier.py (ClassTable): Add a new column for the
151            "Visible" check boxes.
152            (Classifier): Rename the buttons and refactor the code to match
153            the new labels.
154    
155            * Thuban/UI/legend.py: Classify button is now called "Properties".
156            Refactored the code to change variable names.
157            (LegendTree.__FillTreeLayer): Only list a group if it is visible.
158    
159            * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
160            MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
161            renamed to MainWindow.LayerEditProperties.
162            (MainWindow.ToggleLegend): Don't include map name in legend title.
163            (MainWindow.SetMap): Added the map name to the window title.
164            (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
165            MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
166            Functionality is found in the layer properties dialog.
167    
168            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
169            draw visible groups.
170    
171    2003-04-09  Jonathan Coles   <[email protected]>
172    
173            * Thuban/UI/classgen.py: Modifications to allow simple
174            addition and selection of new color schemes.
175            (MonochromaticRamp): New. Generates a ramp between two colors.
176            (RedRamp): New. Generates a ramp of all red.
177            (GreenRamp): New. Generates a ramp of all green.
178            (BlueRamp): New. Generates a ramp of all blue.
179    
180    2003-04-09  Jonathan Coles   <[email protected]>
181    
182            * Thuban/Model/classification.py (Classification.__deepcopy__):
183            Need to copy over field and fieldType attributes.
184    
185            * Thuban/Model/table.py (Table.field_range): New. Retrive the
186            maximum and minimum values over the entire table for a given
187            field.
188            (Table.GetUniqueValues): New. Retrieve all the unique values
189            in the table for a given field.
190    
191            * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
192            (GenUniquePanel): New. Controls to allow the user to select
193            which unique field values they would like in the classification.
194            (CustomRampPanel): Code that was in ClassGenDialog that allows
195            the user to select the properties for a custom ramp.
196            (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
197    
198            * Thuban/UI/classifier.py: Removed a lot of debugging code.
199            (Classifier._SetClassification): Callback method so that the
200            class generator can set the classification in the grid.
201            (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
202            editing of a group properties class into a wxWindows control.
203    
204            * Thuban/UI/dock.py: It was decided that if the user closes
205            a dockable window the window should simply hide itself. That
206            way if the user wants to show the dock again it appears in the
207            same place as it was when it was closed.
208            (DockableWindow.Destroy): Call renamed method OnDockDestroy().
209            (DockableWindow._OnButtonClose): Hide the window instead of
210            destroying it.
211            (DockableWindow._OnClose): Hide the window instead of
212            destroying it.
213    
214            * Thuban/UI/legend.py (LegendTree): Use a private method to
215            consistently set the font and style of the text. Fixes RTbug #1786.
216    
217            * Thuban/UI/mainwindow.py: Import just the Classifier class.
218    
219    2003-04-07  Bernhard Herzog  <[email protected]>
220    
221            * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
222            to the map module
223    
224    2003-04-07  Bernhard Herzog  <[email protected]>
225    
226            * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
227            favor of ToggleSessionTree
228            (MainWindow.ToggleSessionTree): New method to toggle visibility of
229            the session tree.
230            (MainWindow.SessionTreeShown): New method to return whether the
231            session tree is currently shown.
232            (MainWindow.ToggleLegend): New method to toggle visibility of the
233            legend
234            (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
235            LegendShown
236            (MainWindow.LegendShown): New method to return whether the legend
237            is currently shown.
238            (_method_command): Add checked parameter so we can define check
239            menu items
240            (_has_tree_window_shown, _has_legend_shown): Use the appropriate
241            mainwindow methods.
242            (show_session_tree, show_legend commands): Removed.
243            (toggle_session_tree, toggle_legend commands): New commands to
244            toggle the visibility of the dialogs
245    
246    2003-04-07  Jonathan Coles   <[email protected]>
247    
248            * Thuban/UI/classgen.py: Fix Windows problem.
249    
250            * Thuban/UI/dock.py: Fix Windows problem.
251    
252            * Thuban/UI/mainwindow.py: Use False instead of false.
253            (MainWindow.ShowLegend): Remove unnecessary switch parameter.
254    
255    2003-04-07  Jonathan Coles   <[email protected]>
256    
257            Since we now say that the order of the groups in a classification
258            matters, it makes sense to be able to manipulate that order. Most
259            of the changes to Thuban/Model/classification.py are to that end.
260    
261            * Thuban/Model/classification.py (Classification.AppendGroup,
262            Classification.InsertGroup, Classification.ReplaceGroup,
263            Classification.RemoveGroup, Classification.GetGroup): Do as the
264            names imply.
265            (Classification.FindGroup): This was called GetGroup, but GetGroup
266            takes an index, while FindGroup takes a value.
267            (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
268            REFERENCE. Currently there is a cyclic reference between the layer
269            and its classification. If the classification doesn't need to know
270            its owning layer we can change this, since it may make sense to be
271            able to use the same classification with different layers.
272    
273            * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
274    
275            * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
276            not AddGroup()
277    
278            * Thuban/UI/classifier.py: Now that we can depend on the order in
279            a Classification and have methods to manipulate that order we don't
280            need to use our own data structures in the grid. We can simply make
281            the grid/table access the information they need from a copy of
282            the classification object.
283            (Classifier._OnCloseBtn): Event handler for when the user clicks
284            'Close'. This is needed so if the user applies changes and then
285            continues to change the table the user has the option of discarding
286            the most recent changes and keeping what they applied.
287    
288            * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
289            into the same group.
290    
291            * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
292            with a really old version of proj, PJ_VERSION won't even be defined.
293            If it isn't defined then just compile so that the function always
294            returns Py_False.
295    
296            * test/test_classification.py: Fix tests to use the renamed methods.
297            Still need to write tests for the new methods.
298    
299    2003-04-04  Jonathan Coles   <[email protected]>
300    
301            * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
302            call to SetSelection out of the method and before the call
303            to __SelectField in __init__. This prevents a recursion of events
304            when _OnFieldSelect is triggered by the user.
305    
306    2003-04-04  Jonathan Coles   <[email protected]>
307    
308            * Thuban/Model/classification.py: Rename Color.None to
309            Color.Transparent.
310            (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
311            Don't bother copying the color, since Colors are immutable.
312    
313            * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
314            Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
315            Thuban/UI/renderer.py, Thuban/UI/view.py:
316            Rename Color.None to Color.Transparent.
317        
318            * test/test_classification.py, test/test_load.py: Rename Color.None
319            to Color.Transparent.
320    
321    2003-04-04  Jonathan Coles   <[email protected]>
322    
323            * Thuban/Model/classification.py: Fix assert calls.
324            (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
325            Copy the color parameter rather than hold onto a reference.
326    
327            * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
328            the color object.
329            (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
330            are sure there exists only one refernce to Color.None in the system.
331            This allows us to use 'is' rather than the comparision functions.
332            
333            * Thuban/Model/save.py: Fix assert calls.
334            
335            * Thuban/UI/classifier.py: Fix assert calls.
336            (ClassGrid._OnCellDClick): Call up to the classifier to open the
337            dialog to edit the groups properties.
338            (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
339            correctly if a cell is resized.
340            (ClassTable.SetClassification): New. Changes the classification
341            that is in the table.
342            (ClassTable.__SetRow): Allow groups to be prepended.
343            (Classifier): New code for opening the EditProperties and
344            GenerateRanges dialogs.
345            (SelectPropertiesDialog.__GetColor): Only set the color in the
346            color dialog if the current color is not None.
347            
348            * Thuban/UI/dock.py: Fix assert calls.
349            
350            * Thuban/UI/legend.py: Fix assert calls.
351            
352            * Thuban/UI/renderer.py: Fix assert calls.
353            
354            * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
355            classifications.
356            (GenRangePanel): Panel specific to range generation.
357            (GenSingletonPanel): Panel specific to singleton generation.
358            (ClassGenerator): Class responsible for actually generating
359            the classification from the data gathered in the dialog box.
360            (PropertyRamp): Generates properties whose values range from
361            a starting property to an ending property.
362    
363    2003-04-03  Bernhard Herzog  <[email protected]>
364    
365            * test/support.py (print_garbage_information): New function that
366            prints information about still connected messages and memory
367            leaks.
368            (run_suite): Removed.
369            (run_tests): New function for use as a replacement of
370            unittest.main in the test_* files. This one calls
371            print_garbage_information at the end.
372    
373            * test/runtests.py (main): Use support.print_garbage_information
374    
375            * test/test_layer.py: Use support.run_tests instead of
376            unittest.main so we get memory leak information
377            (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
378            (TestLayer.test_point_layer, TestLayer.test_empty_layer)
379            (TestLayerLegend.test_visibility): Call the layer's Destroy method
380            to fix a memory leak.
381    
382            * test/test_classification.py: Use support.run_tests instead of
383            unittest.main so we get memory leak information
384            (TestClassification.test_classification): Call the layer's Destroy
385            method to fix a memory leak.
386    
387    2003-04-02  Bernhard Herzog  <[email protected]>
388    
389            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
390            Handle the reference counts of the return value and errors in
391            PyArg_ParseTuple correctly.
392    
393            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
394            sure the filename is absolute to avoid problems when saving the
395            session again
396    
397            * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
398    
399    2003-04-01  Jonathan Coles   <[email protected]>
400    
401            *  Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
402            that there actually are points in the returned list of points
403            before trying to index into the list. The list may be empty if
404            the shape is a Null Shape.
405    
406    2003-04-01  Bernhard Herzog  <[email protected]>
407    
408            * test/test_map.py: Don't use from <module> import *
409    
410    2003-04-01  Jonathan Coles   <[email protected]>
411    
412            * Thuban/Model/session.py: Use LAYER_CHANGED instead of
413            LAYER_LEGEND_CHANGED
414    
415            * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
416            self.Destroy() to close the window after yesterday's changes.
417    
418            * test/test_map.py, test/test_session.py: Fix messages that
419            are sent from maps and layers.
420    
421    2003-03-31  Jonathan Coles   <[email protected]>
422    
423            * Thuban/UI/classifier.py: Commented out some debugging statements.
424            (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
425            RTbug #1769.
426    
427            * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
428            position (although position doesn't work yet under GTK).
429            (DockableWindow.Destroy): New. Called when the window must be
430            closed. Namely needed when the DockFrame closes and must close
431            its children.
432            (DockFrame): Listen for EVT_CLOSE and destroy all children.
433    
434            * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
435            when then window is told to close.
436            (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
437            comment in source for more info.
438    
439            * Thuban/UI/main.py: Show the legend by default when Thuban starts.
440    
441            * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
442            symmetry with other such methods.
443            (MainWindow.ShowLegend): Show the legend docked by default.
444    
445    2003-03-28  Jonathan Coles   <[email protected]>
446    
447            * Thuban/UI/classifier.py: Support for highlighting a specific
448            group within the grid when the classification dialog is opened.
449            Also contains a lot of debugging printouts which will later
450            be removed.
451    
452            * Thuban/UI/dock.py: Complete rework on the dock code so that
453            that it is fairly removed from the rest of the Thuban application.
454            It is easy to add new docks which the rest of the program having
455            to be aware of them.
456    
457            * Thuban/UI/legend.py: Modifications to support selecting a
458            specific group in the classification dialog. Changed how layers
459            are drawn when the layer is visible/invisible.
460    
461            * Thuban/UI/mainwindow.py: Removed legend specific code and
462            replaced it with calls to the new dock code.
463    
464            * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
465            to check if scale > 0. Trying to track down a divide by zero.
466    
467    2003-03-26  Jonathan Coles   <[email protected]>
468    
469            * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
470            (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
471            now part of DockableWindow.
472            (LegendPanel.DoOnSelChanged): Select the current layer in the
473            map.
474            (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
475            with the selected layer and/or group.
476    
477    2003-03-26  Jonathan Coles   <[email protected]>
478    
479            This putback contains the code for dockable windows. There is
480            no support in wxWindows as of this date for windows that can
481            attach themselves to other windows.
482    
483            The current model contains a DockableWindow which has a parent
484            window for when it is detached and a dock window that it puts
485            its contents in when it is docked. The contents of a DockableWindow
486            must be a DockPanel. DockPanel itself derives from wxPanel.
487    
488            * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
489            message, not a LAYER_LEGEND_CHANGED message.
490    
491            * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
492    
493            * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
494            as one of the style properties for the fieldTypeText item to
495            be sure that its size is correct when the text changes.
496    
497            * Thuban/UI/dock.py: New. Classes for the DockPanel and
498            DockableWindow.
499    
500            * Thuban/UI/legend.py: Added some more buttons and made the
501            LegendPanel a DockPanel.
502    
503            * Thuban/UI/mainwindow.py: Added sash windows to the main window
504            and supporting functions for manipulating the sashes.
505            (MainWindow.ShowLegend): Create a DockableWindow with the
506            LegendPanel as the contents.
507    
508            * Thuban/UI/messages.py: Added DOCKABLE_* messages
509    
510            * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
511            not LAYER_LEGEND_CHANGED, messages.
512    
513    2003-03-25  Jonathan Coles   <[email protected]>
514    
515            * setup.py: Added custom script bdist_rpm_build_script so that
516            when the rpm is built the path to wx-config is correct.
517    
518            * setup.cfg: Added line saying to use the custom build script
519    
520    2003-03-20  Jonathan Coles   <[email protected]>
521    
522            Initial implementation of the Legend.
523    
524            * Thuban/UI/legend.py: New. Creates a window that shows the map's
525            Legend information and allows the user to add/modify classifications
526            and how the layers are drawn on the map.
527    
528            * setup.py: New command 'build_docs' which currently uses
529            happydoc to generate html documentation for Thuban.
530    
531            * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
532            Returns a string which is appropriately describes the group.
533    
534            * Thuban/Model/layer.py (Layer.SetClassification): Generate a
535            LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
536    
537            * Thuban/Model/map.py (Map): Rename messages and use new, more
538            specific, messages.
539    
540            * Thuban/Model/messages.py: New message to indicate that a layer's
541            data has changed (LAYER_CHANGED). New map messages to indicate
542            when layers have been added/removed/changed or if the stacking order
543            of the layers has changed.
544    
545            * Thuban/Model/session.py: Rename and use new messages.
546    
547            * Thuban/UI/classifier.py: Remember if any changes have actually
548            been applied so that if the dialog is cancelled without an application
549            of changes we don't have to set a new classification.
550            (ClassDataPreviewer): Pulled out the window specific code and put it
551            ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
552            symbols on any DC.
553            
554            * Thuban/UI/mainwindow.py: New code to open the legend.
555    
556            * Thuban/UI/view.py: Use new message names.
557    
558    2003-03-19  Jonathan Coles   <[email protected]>
559    
560            * Thuban/UI/main.py (verify_versions): New. Checks the versions
561            of Python, wxPython, and some other libraries.
562    
563            * extensions/thuban/wxproj.cpp (check_version): Checks the given
564            version against what wxproj was compiled with.
565            (check_version_gtk): If wxproj was compiled with gtk then check
566            the given version against the version of the gtk library
567            currently being used.
568    
569    2003-03-14  Bernhard Herzog  <[email protected]>
570    
571            * test/test_command.py: Run the tests when the module is run as a
572            script
573    
574    2003-03-14  Bernhard Herzog  <[email protected]>
575    
576            Implement selection of multiple selected shapes in the same layer:
577    
578            - Introduce a new class to hold the selection. This basically
579              replaces the interactor which was nothing more than the
580              selection anyway. A major difference is of course that the new
581              selection class supports multiple selected shapes in one layer
582            
583            - Move the object that represents the selection from the
584              application to the canvas. The canvas is a better place than the
585              application because the selection represents which shapes and
586              layer of the map displayed by the canvas are selected and
587              affects how the map is drawn.
588    
589            - Make the selection and its messages publicly available through
590              the mainwindow.
591    
592            - The non-modal dialogs do not get a reference to the interactor
593              anymore as they can simply refer to their parent, the
594              mainwindow, for the what the interactor had to offer.
595    
596            * Thuban/UI/selection.py: New module with a class to represent the
597            selection.
598    
599            * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
600            these unused messages
601    
602            * Thuban/UI/application.py (ThubanApplication.OnInit)
603            (ThubanApplication.OnExit, ThubanApplication.SetSession): The
604            interactor is gone now.
605            (ThubanApplication.CreateMainWindow): There is no interactor
606            anymore so we pass None as the interactor argument for now for
607            compatibility.
608    
609            * Thuban/UI/view.py (MapCanvas.delegated_messages)
610            (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
611            Unsubscribe, delegate messages according to the delegated_messages
612            class variable.
613            (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
614            attributes from instance variables as described with the
615            delegated_methods class variable.
616            (MapCanvas.__init__): New instance variable selection holding the
617            current selection
618            (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
619            pass them on to the renderer
620            (MapCanvas.SetMap): Clear the selection when a different map is
621            selected.
622            (MapCanvas.shape_selected): Simple force a complete redraw. The
623            selection class now takes care of only issueing SHAPES_SELECTED
624            messages when the set of selected shapes actually does change.
625            (MapCanvas.SelectShapeAt): The selection is now managed in
626            self.selection
627    
628            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
629            (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
630            Unsubscribe, delegate messages according to the delegated_messages
631            class variable.
632            (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
633            attributes from instance variables as described with the
634            delegated_methods class variable.
635            (MainWindow.__init__): The interactor as ivar is gone. The
636            parameter is still there for compatibility. The selection messages
637            now come from the canvas.
638            (MainWindow.current_layer, MainWindow.has_selected_layer):
639            Delegate to the the canvas.
640            (MainWindow.LayerShowTable, MainWindow.Classify)
641            (MainWindow.identify_view_on_demand): The dialogs don't need the
642            interactor parameter anymore.
643    
644            * Thuban/UI/tableview.py (TableFrame.__init__)
645            (LayerTableFrame.__init__, LayerTableFrame.OnClose)
646            (LayerTableFrame.row_selected): The interactor is gone. It's job
647            from the dialog's point of view is now done by the mainwindow,
648            i.e. the parent. Subscribe to SHAPES_SELECTED instead
649            of SELECTED_SHAPE
650            
651            * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
652            is gone. It's job from the dialog's point of view is now done by
653            the mainwindow, i.e. the parent.
654            
655            * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
656            gone. It's job from the dialog's point of view is now done by the
657            mainwindow, i.e. the parent.
658    
659            * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
660            gone. It's job from the dialog's point of view is now done by the
661            mainwindow, i.e. the parent.
662            (SessionTreeCtrl.__init__): New parameter mainwindow which is
663            stored as self.mainwindow. The mainwindow is need so that the tree
664            can still subscribe to the selection messages.
665            (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
666            (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
667            selection is now accessible through the mainwindow. Subscribe to
668            SHAPES_SELECTED instead of SELECTED_SHAPE
669    
670            * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
671            SHAPES_SELECTED message now.
672            (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
673            so deal with multiple shapes
674            (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
675            gone. It's job from the dialog's point of view is now done by the
676            mainwindow, i.e. the parent.
677    
678            * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
679            parameter is now a list of shape ids.
680            (RecordTable.SetTable): The second parameter is now a list of
681            indices.
682    
683            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
684            selected_shape parameter and ivar to selected_shapes. It's now a
685            list of shape ids.
686            (MapRenderer.draw_label_layer): Deal with multiple selected
687            shapes. Rearrange the code a bit so that the setup and shape type
688            distinctions are only executed once.
689    
690            * test/test_selection.py: Test cases for the selection class
691    
692    2003-03-11  Jonathan Coles   <[email protected]>
693    
694            * Thuban/Model/load.py: Temporary fix so that the xml reader
695            doesn't cause Thuban to crash.
696    
697            * Thuban/Model/layer.py: Handle the cyclic references between
698            a layer and its classification better, and be sure to disconnect
699            the classification from the layer when the layer is destroyed
700            so that we don't maintain a cyclic reference that may not be
701            garbage collected.
702    
703            * Thuban/Model/classification.py: See comment for layer.py.
704    
705    2003-03-12  Jan-Oliver Wagner <[email protected]>
706    
707            * HOWTO-Release: New. Information on the steps for releasing
708            a new version of Thuban.
709    
710    2003-03-11  Jonathan Coles   <[email protected]>
711    
712            * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
713            Use True instead of true.
714            (Classifier): Should have a single panel in which all the controls lie.
715    
716            * Thuban/UI/proj4dialog.py: Add normal border.
717    
718            * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
719    
720            * Thuban/UI/mainwindow.py: Use True instead of true.
721    
722            * setup.py: Update some definitions to use wxWindows2.4 files
723    
724            * Data/iceland_sample_class.thuban: Fixed file so that the
725            field_type information is present.
726    
727    2003-03-10  Jonathan Coles   <[email protected]>
728    
729            * Thuban/UI/classifier.py (Classifier.__init__): Make the
730            field type label grow so that when the text changes the
731            size is updated correctly. This may be a wxWindows bug.
732    
733    2003-03-10  Jonathan Coles   <[email protected]>
734    
735            * Thuban/UI/application.py: Changed SESSION_CHANGED to
736            SESSION_REPLACED.
737    
738            * Thuban/UI/classifier.py: Wrap text with _().
739            (ClassGrid.CreateTable): Set dimensions and size hints here,
740            instead of in Reset, so we only set the size once.
741    
742            * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
743    
744            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
745            Call Close() instead of Shutdown().
746    
747            * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
748    
749            * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
750            Go back to using OnClose() instead of Shutdown().
751    
752    2003-03-10  Jonathan Coles   <[email protected]>
753    
754            * Thuban/UI/classifier.py (Classifier): SelectField() needed
755            to know the old field index as well as the new one.
756    
757    2003-03-10  Jonathan Coles   <[email protected]>
758    
759            * Thuban/UI/classifier.py (Classifier): Use __SelectField()
760            to correctly set the table information and call this from
761            __init__ and from _OnFieldSelect so that all the information
762            is up to date when the dialog opens and when a field is changed.
763    
764    2003-03-10  Jonathan Coles   <[email protected]>
765    
766            * Thuban/Model/classification.py (Classification): Don't use
767            layer's message function directly, use the ClassChanged() method
768            when then classification changes. SetField/SetFieldType/SetLayer
769            must keep the information about field name and field type in
770            sync when an owning layer is set or removed.
771    
772            * Thuban/Model/layer.py: Added ClassChanged() so that the
773            classification can tell the layer when its data has changed.
774            (Layer.SetClassification): Accepts None as an arguement to
775            remove the current classification and correctly handles
776            adding a new classification.
777    
778            * Thuban/Model/load.py: Comment out print statement
779    
780            * test/test_classification.py, test/test_save.py: New and
781            improved tests.
782    
783    2003-03-07  Jonathan Coles   <[email protected]>
784    
785            * Thuban/Model/classification.py: Implemented __copy__ and
786            __deepcopy__ for ClassGroup* and ClassGroupProperites so
787            they can easily be copied by the classifier dialog.
788            (ClassGroupProperites.__init__): The default line color should
789            have been Color.Black.
790    
791            * Thuban/UI/classifier.py: Setting and Getting table values now
792            uses a consistent set of functions.
793            (Classifier): Now non-modal. Has field type label which changes
794            as the field changes. Keep track of buttons in a list so that
795            we can enable/disable the buttons when the None field is selected.
796            (SelectPropertiesDialog): Add buttons to make the colors transparent.
797    
798            * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
799            does what OnClose did, but can be called by the application to
800            close a window. Needed when a session changes, and we have to
801            close the classifier windows.
802    
803            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
804            Shuts down open dialogs. Used when a new session is created
805            or a session is opened.
806            (MainWindow.SaveSession): Should only call application.SaveSession()
807            if we don't call SaveSessionAs first.
808            (MainWindow.Classify): Allow different classifier dialogs for
809            different layers.
810    
811            * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
812            the parent class handle it. Add Shutdown() to unsubscibe from
813            event notification and call the parent Shutdown(). This was
814            necessary so the application can close the tree window.
815    
816    2003-03-06  Jonathan Coles   <[email protected]>
817    
818            * Thuban/Model/classification.py: Minor documentation changes,
819            Addition of __eq__ and __ne__ methods.
820            (Classification.SetLayer): prevent recursion between this method
821            and Layer.SetClassification().
822    
823            * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
824    
825            * Thuban/Model/layer.py (SetClassification): prevent recursion
826            between this method and Classification.SetLayer().
827    
828            * test/test_classification.py, test/test_load.py,
829            test/test_session.py: Fixed and added tests for the classification
830            classes.
831    
832    2003-03-06  Bernhard Herzog  <[email protected]>
833    
834            * Thuban/UI/classifier.py (ClassGrid.__init__)
835            (ClassGrid.CreateTable): Move the SetSelectionMode call to
836            CreateTable because otherwise it triggers an assertion in
837            wxPython/wxGTK 2.4.
838    
839    2003-03-05  Jonathan Coles   <[email protected]>
840    
841            * Thuban/common.py: Move FIELDTYPE constants back to table.py.
842    
843            * Thuban/Model/load.py: import FIELDTYPE constants from table.
844    
845            * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
846    
847            * Thuban/Model/table.py: Put FIELDTYPE constants back.
848    
849    2003-03-05  Jonathan Coles   <[email protected]>
850    
851            * Thuban/UI/classifier.py: Added class documentation.
852            Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
853            Store just the groups in the table and generate the other
854            column information when it is requested. Add "None" field
855            to pull-down to select no classification.
856    
857            * Thuban/common.py: Moved FIELDTYPE constants from table.py
858            (Str2Num): Only catch ValueError exceptions.
859    
860            * Thuban/Model/classification.py: Class documentation. Renaming
861            of methods with Stroke to Line. Groups are stored in a single
862            list with the default as the first element. Groups are searched
863            in the order they appear in the list.
864    
865            * Thuban/Model/color.py: Documentation.
866    
867            * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
868            the kind of data represented by a field.
869    
870            * Thuban/Model/load.py (ProcessSession): Use proper string
871            conversion function; fixes RTbug #1713.
872    
873            * Thuban/Model/save.py (Saver): Store field type information.
874    
875            * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
876            (Table): Add field_info_by_name() to retrieve field information
877            by specifying the field name, not the number.
878    
879            * Thuban/UI/mainwindow.py: Function name changes.
880    
881            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
882            get the layer classification once. Don't try to classify
883            values when the field is None: just use the default properties.
884    
885            * Thuban/UI/view.py: Function name changes.
886    
887            * Doc/thuban.dtd: Add field_type attribute to a classification.
888    
889    2003-03-04  Bernhard Herzog  <[email protected]>
890    
891            * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
892            the fill and stroke layer attributes optional with suitable
893            default values. Add the stroke_width layer attribute. Use correct
894            syntax for empty elements. Make the attribute list for labels
895            refer to the label element.
896    
897    2003-03-04  Bernhard Herzog  <[email protected]>
898    
899            * setup.py (thuban_build_py.build): Add a comment about distutils in
900            Python 2.3 containing some of the functionality we implement in
901            setup.py ourselves.
902    
903            * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
904            before the selection mode. Doing it the other way round triggers
905            an assertion in wxWindows.
906    
907            * Thuban/Model/save.py (escape): Fix typo in doc-string
908    
909            * Thuban/Model/classification.py: Remove unnecessary wxPython
910            import
911    
912    2003-03-04  Jonathan Coles   <[email protected]>
913    
914            * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
915            Parameter 'value' should default to None.
916    
917            * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
918            the class attribute __classification is now private.
919    
920            * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
921            Classifier to ClassGrid. Added support for removing selected rows,
922            which including code for keeping track of when cells are selected,
923            and deselected.
924            (ClassTable): Support for added/removing rows. Fixed a problem
925            with __ParseInput whereby it would not allow strings (only numbers)
926            to be entered.
927            (Classifier): Added button and supporting code for removing
928            selected rows.
929    
930    2003-02-27  Jonathan Coles   <[email protected]>
931    
932            * Thuban/common.py: Moved color conversion functions into
933            Thuban/UI/common.py.
934            (Str2Num): Now converts the float (not the string) to a long/int
935            so that an exception isn't thrown.
936    
937            * Thuban/UI/common.py: Common functions used in several UI modules
938    
939            * Thuban/Model/classification.py: Changed the class hierarchy
940            so that a Classification consists of Groups which return
941            Properties when a value matches a Group.
942    
943            * Thuban/Model/layer.py: Fixed name resolution problem.
944    
945            * Thuban/Model/load.py: Use new Classification and Group functions.
946    
947            * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
948            failure.
949            (Saver.write_classification): Use new Classification and Group
950            functions.
951    
952            * Thuban/UI/classifier.py: Changes to use new Classification and Group
953            functions. Fix to create a tuple with a single value instead of
954            simply returning the value.
955    
956            * Thuban/UI/renderer.py: Use new Classification and Group functions.
957            Use common.py functions.
958    
959            * Thuban/UI/tree.py: Use common.py functions.
960            
961            * test/test_classification.py: Use new Classification and Group
962            classes.
963    
964    2003-02-24  Jonathan Coles   <[email protected]>
965    
966            * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
967            functions from Thuban color objects to wxWindow colour objects.
968    
969            * Thuban/Model/classification.py (Classification): Renamed
970            GetProperties() to GetClassData(). Used the new iterator
971            in TreeInfo().
972            (ClassIterator): Iterator implementation to iterate over the
973            ClassData objects in a classification object.
974    
975            * Thuban/Model/save.py (Saver.write_classificaton): Uses
976            the new iterator to save the classification information.
977    
978            * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
979            for changing the stroke and fill colors and previewing the
980            changes.
981    
982            * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
983            MainWindow.SaveSessionAs): Text string changes so the dialogs
984            have more meaningful titles.
985    
986            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
987            Classification method name from GetProperties to GetClassData.
988    
989            * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
990            instead of accessing now non-existent class variables.
991    
992    2003-02-24  Bernhard Herzog  <[email protected]>
993    
994            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
995            unneeded Shape() call. Rendering is substantially faster without
996            it and it avoids some problems with broken shape files.
997    
998    2003-02-20  Frank Koormann   <[email protected]>
999    
1000            Force minimal size of identify and label dialogs. The autosizing
1001            looked too ugly.
1002    
1003            * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
1004            * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
1005            Set size of listctrl.
1006            * Thuban/UI/identifyview.py (IdentifyView.__init__):
1007            Set size of dialog.
1008    
1009    2003-02-19  Jonathan Coles   <[email protected]>
1010    
1011            * test/test_classification.py, test/test_layer.py,
1012            test/test_load.py, test/test_map.py, test/test_session.py:
1013            Updated the tests to use the new functions that are in the
1014            respective classes.
1015    
1016            * Thuban/Model/classification.py (Classification):
1017            Uses the new ClassData* classes. Modification messages are
1018            passed up to the parent layer (if it exists).
1019            (ClassData): New class to encapsulate the common data in each
1020            classification property.
1021            (ClassDataDefault): Represents the Default class. data.
1022            (ClassDataPoint): Represents a single class. data point
1023            (ClassDataRange): Represents a class. range
1024            (ClassDataMap): Represents a class. map (unused).
1025    
1026            * Thuban/Model/color.py: Added Color.None to represent something
1027            with no color. Color.Black represents the color black.
1028            (NoColor): Helper class derived from Color to represent something
1029            with no color.
1030    
1031            * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
1032            stroke_width attributes. Made the 'classification' attribute private.
1033            New methods for setting/getting the classification.
1034    
1035            * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
1036            to get the classifcation and use the new ClassData* classes to
1037            hold the classification data. Use Str2Num to convert numbers
1038            properly.
1039    
1040            * Thuban/Model/save.py (Saver): Use new Color and Classification
1041            methods
1042    
1043            * Thuban/UI/classifier.py (ClassGrid): New class to represent a
1044            custom grid.
1045            (ClassTable): Support for editing Values and Labels and for
1046            changing what type (point or range) of data is stored in each
1047            property based on how the user enters the data.
1048            (Classifier): Support for saving the new classifications and
1049            launching the dialog to edit a property.
1050            (SelectPropertiesDialog): New class for editing the visual
1051            properties of a classification (stroke color, width, and fill color)
1052            (ClassPreviewer): Took the Draw method from ClassRenderer and
1053            made most of it into this new class. Intend to use this class in
1054            the SelectPropertiesDialog for previewing changes.
1055    
1056            * Thuban/UI/renderer.py: Use new Color and Classification methods.
1057    
1058            * Thuban/UI/tree.py: Formatting changes.
1059    
1060            * Doc/thuban.dtd: Add 'label' element
1061    
1062            * Thuban/common.py: New. Contains common routines used throughout
1063            the code.
1064            (Str2Num): Takes a string and converts it to the "best" type of
1065            number.
1066    
1067    2003-02-14  Bernhard Herzog  <[email protected]>
1068    
1069            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
1070            dragging flag is always set to 0 even when the tool implementation
1071            raises an exception
1072    
1073    2003-02-11  Bernhard Herzog  <[email protected]>
1074    
1075            * Thuban/UI/application.py (ThubanApplication.splash_screen): New
1076            method to create a splash screen.
1077            (ThubanApplication.ShowMainWindow): New. Show the main window.
1078            Needed so the splash screen can display the mainwindow
1079            (ThubanApplication.OnInit): Call the
1080            new splash_screen method to determine whether the application
1081            should display a splash screen. If it displays a splash screen do
1082            not immediately show the main window.
1083    
1084    2003-02-11  Jonathan Coles  <[email protected]>
1085    
1086            * Thuban/Model/classification.py: Added import line to fix
1087            feature conflicts between running on python2.2 and python2.1.
1088    
1089            * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
1090            onto the clinfo parameter, so removed the deepcopy().
1091    
1092    2003-02-10  Jonathan Coles  <[email protected]>
1093    
1094            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
1095            Added element_open variable to track opening and closing of tags
1096            so that tags that don't span more than one line are closed with
1097            /> instead of </tag_name>. Use the GetDefault*() methods of
1098            the Classification class.
1099    
1100            * Thuban/Model/classification.py (Classificaton): Added set and
1101            get methods for the default data. The class also takes a layer
1102            reference so that modification messages can be sent. Fixed the
1103            methods to use the new ClassData class.
1104            (ClassData): New class to encapsulate the classification data
1105    
1106            * Thuban/Model/layer.py (Layer): Remove the
1107            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
1108            SetDefault*() methods on the layer's classification object.
1109            (Layer.__init__): Use the new SetDefault*() methods in the
1110            Classification class.
1111    
1112            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
1113            object instead of a dictionary.
1114    
1115            * Thuban/UI/classifier.py (ClassRenderer): New class to
1116            draw the classifications in the dialog box's table.
1117            (Classifier): Modified to use the ClassRenderer class.
1118    
1119            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
1120            methods of the Classification class.
1121    
1122            * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
1123            of the ClassData class.
1124    
1125            * test/test_classification.py, test/test_layer.py,
1126            test/test_map.py, test/test_session.py: Fix the tests to work
1127            with the above code changes.
1128    
1129    2003-02-03  Jonathan Coles  <[email protected]>
1130    
1131            * Thuban/Model/classification.py (Classification): Added getNull()
1132            to return the NullData reference
1133    
1134            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
1135            Layer.SetStrokeWidth): Modified these functions to change the
1136            null data in the classification rather than keep these values
1137            directly in the Layer class. Menu options to change these values
1138            work again.
1139    
1140    2003-01-28  Jonathan Coles  <[email protected]>
1141    
1142            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
1143            Fixed crashing problem on some systems. Dialog box shows
1144            classification data.
1145    
1146            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
1147            Colors in the tree view.
1148    
1149            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
1150            the tree info for classifications. Commented out unnecessary lines.
1151    
1152            * Thuban/Model/classification.py (Classification.TreeInfo): New
1153            function to add information about the classification into the
1154            tree view.
1155    
1156    2003-01-27  Jan-Oliver Wagner <[email protected]>
1157    
1158            * Thuban/__init__.py (_): New.
1159    
1160            * Thuban/Model/classification.py, Thuban/Model/extension.py,
1161            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
1162            Thuban/Model/session.py, Thuban/UI/application.py,
1163            Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
1164            Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
1165            Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
1166            Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
1167            Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
1168    
1169    2003-01-27  Jonathan Coles  <[email protected]>
1170    
1171            * Thuban/Model/layer.py: Classification initialization calls.
1172    
1173            * Thuban/Model/classification.py: Created class to encapsulate
1174            a layer classification. Supports specific data points and
1175            ranges.
1176    
1177            * Thuban/Model/load.py: Added support for loading classification
1178            information.
1179    
1180            * Thuban/Model/save.py: Added support for saving classification
1181            information.
1182    
1183            * Thuban/UI/classifier.py: Initial class for a dialog box for
1184            specifying classification information.
1185    
1186            * Thuban/UI/mainwindows.py: Support for opening the classifier
1187            dialog.
1188    
1189            * Thuban/UI/renderer.py: Support for drawing a layer with the
1190            classification information.
1191    
1192            * Data/iceland_sample_class.thuban: iceland_sample with
1193            classification data.
1194    
1195            * test/test_classification: Tests for the Classification class.
1196    
1197    2002-12-09  Bernhard Herzog  <[email protected]>
1198    
1199            * test/test_command.py: New. Tests for the command classes.
1200    
1201            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
1202            (Command.IsTool): New method to distinguish between command
1203            switching tools and other commands.
1204    
1205            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
1206            the tool to avoid direct assignments to instance variables
1207            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
1208            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
1209            change the tool
1210    
1211            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
1212            active tool's command turns insensitive, disable the tool.
1213            (_tool_command): Use the new ToolCommand class
1214    
1215            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
1216            SelectTool method to change the tool
1217            (iconfile): Use the ToolCommand class
1218    
1219    2002-12-03  Bernhard Herzog  <[email protected]>
1220    
1221            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
1222            the case of selected items that are not children of Layers or Maps
1223            properly. Previously this bug would trigger an assertion in
1224            wxWindows.
1225    
1226    2002-11-06  Frank Koormann  <[email protected]>
1227    
1228            * Thuban/UI/mainwindow.py: Altered the order of tools in the
1229            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
1230            Full Extent).
1231    
1232    2002-10-23  Bernhard Herzog  <[email protected]>
1233    
1234            * setup.py (setup call): version now 0.1.3
1235    
1236            * MANIFEST.in: Add the files in test/
1237    
1238            * test/README: Add note about tests requiring the iceland data
1239    
1240            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
1241            copyright notice.
1242    
1243    2002-10-18  Bernhard Herzog  <[email protected]>
1244    
1245            * test/test_map.py
1246            (TestMapWithContents.test_projected_bounding_box): Use an explicit
1247            epsilon.
1248    
1249            * test/support.py (FloatComparisonMixin.assertFloatEqual)
1250            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
1251            message if the assertion fails and don't return the return value
1252            of self.assert_. In assertFloatSeqEqual the return meant that not
1253            all items of the sequence were compared.
1254    
1255    2002-09-20  Bernhard Herzog  <[email protected]>
1256    
1257            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
1258    
1259            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
1260    
1261            * test/test_map.py (TestMapWithContents.test_tree_info): Create
1262            the string with the bounding box on the fly because of platform
1263            differences in the way %g is handled.
1264    
1265            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
1266            DBFfile too because Thuban layers can't yet cope missing DBF
1267            files.
1268    
1269    2002-09-20  Bernhard Herzog  <[email protected]>
1270    
1271            * test/test_menu.py: Use initthuban instead of
1272            add_thuban_dir_to_path to initialize Thuban.
1273    
1274            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
1275            Mixin class for float comparisons
1276            (SubscriberMixin): New. Mixin class to test messages sent through
1277            the Connector class
1278    
1279            * test/README: Fix a typo and add the -v flag to the command for
1280            individual tests
1281    
1282            * test/test_session.py: New. Test cases for Thuban.Model.session
1283    
1284            * test/test_proj.py: New. Test cases for Thuban.Model.proj
1285    
1286            * test/test_map.py: New. Test cases for Thuban.Model.map
1287    
1288            * test/test_layer.py: New. Test cases for Thuban.Model.layer
1289    
1290            * test/test_label.py: New. Test cases for Thuban.Model.label
1291    
1292            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
1293    
1294            * test/test_color.py: New. Test cases for Thuban.Model.color
1295    
1296            * test/test_base.py: New. Test cases for Thuban.Model.base
1297    
1298    2002-09-13  Bernhard Herzog  <[email protected]>
1299    
1300            * Thuban/Model/session.py (Session.forwarded_channels): Forward
1301            the CHANGED channel too.
1302    
1303            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
1304            CHANGED channel too.
1305            (Map.__init__): Call the Modifiable constructor as well.
1306    
1307            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
1308            event if the modified flag changes.
1309            (Modifiable.changed): Tweak the doc-string.
1310    
1311            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
1312            (MainWindow.set_position_text): Put the code that puts the text
1313            with the mouse position into the status bar into the new method
1314            set_position_text so that it can overwritten in derived classes.
1315    
1316    2002-09-12  Bernhard Herzog  <[email protected]>
1317    
1318            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
1319            message box on the main window.
1320    
1321    2002-09-11  Bernhard Herzog  <[email protected]>
1322    
1323            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
1324            the 'E' because it's less likely to interfere with other menu
1325            entries.
1326            (MainWindow.build_menu): remove an incorrect comment.
1327    
1328    2002-09-10  Bernhard Herzog  <[email protected]>
1329    
1330            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
1331            (_tool_command): Add sensitive parameter
1332            (_has_visible_map): Sensitivity callback to tools and other
1333            commands that require a visible map. Use it in map_zoom_in_tool,
1334            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
1335            and map_full_extent
1336    
1337    2002-09-06  Bernhard Herzog  <[email protected]>
1338    
1339            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
1340            VIEW_POSITION
1341    
1342    2002-09-04  Frank Koormann  <[email protected]>
1343    
1344            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
1345    
1346    2002-09-02  Bernhard Herzog  <[email protected]>
1347    
1348            * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
1349            wxWindows already and our implementation doesn't work correctly
1350            with wxGTK 2.3:
1351            (MapCanvas.__init__): Remove the instance variable
1352            (MapCanvas.OnPaint): Always call do_redraw when there's a map to
1353            be drawin
1354            (MapCanvas.OnIdle): Removed.
1355    
1356            * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
1357            a parameter to determine the size of the rectangle.
1358            (MapCanvas.find_shape_at): Create the box around the point on a
1359            layer by layer basis and make the size depend on the shape type.
1360            This solves a problem with the selection of point shapes at the
1361            border of the layer's bounding box
1362    
1363    2002-08-30  Bernhard Herzog  <[email protected]>
1364    
1365            * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
1366            for the sensitivity  of remove layer.
1367            (_can_remove_layer): New. Sensitivity callback for remove layer
1368            (Command layer_remove): Use _can_remove_layer
1369    
1370            * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
1371            determine whether a given layer can be deleted.
1372    
1373            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
1374            (MapCanvas.do_redraw): Get rid of the unused update_region
1375            instance variable
1376    
1377            * Thuban/UI/view.py: Add/update some doc-strings.
1378    
1379            * test/: new subdirectory with a bunch of unit tests.
1380    
1381            * test/README, test/test_table.py, test/test_save.py,
1382            test/test_menu.py, test/test_load.py: Initial set of tests and
1383            brief instructions on how to run them
1384    
1385    2002-08-29  Bernhard Herzog  <[email protected]>
1386    
1387            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
1388            arcs with multiple parts.
1389    
1390            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
1391            Handle degenrate rectangles.
1392    
1393            * Thuban/Model/table.py: Make writing records work correctly:
1394            (Table.__init__): Keep track of whether the DBF is open for
1395            writing
1396            (Table.write_record): Open the DBF file for writing when necessary
1397    
1398    2002-08-27  Bernhard Herzog  <[email protected]>
1399    
1400            * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
1401            dbf files only for reading by default. Use a new writable dbf
1402            object for writing.
1403    
1404    2002-08-26  Bernhard Herzog  <[email protected]>
1405    
1406            * Thuban/UI/mainwindow.py: Refactor the context creation:
1407            (MainWindow.Context): New method to return a context
1408            (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
1409            new method
1410    
1411            * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
1412            layer table specific code from TableGrid into LayerTableGrid
1413            (TableFrame, LayerTableFrame): Split the layer table specific code
1414            from TableFrame into LayerTableFrame
1415            (LayerTableGrid.select_shape): Remove a debug print
1416    
1417            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
1418            LayerTableFrame
1419    
1420    2002-08-23  Bernhard Herzog  <[email protected]>
1421    
1422            * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
1423            absolute filename.
1424    
1425    2002-08-22  Bernhard Herzog  <[email protected]>
1426    
1427            * Thuban/Model/table.py (Table.write_record): New method to write
1428            records.
1429            (Table.__init__): Open the DBF file for writing too.
1430    
1431            * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
1432            into the underlying table.
1433    
1434            * extensions/shapelib/shapefil.h (DBFCommit),
1435            extensions/shapelib/dbfopen.c (DBFCommit): New API function to
1436            commit any changes made to the DBF file.
1437    
1438            * Thuban/UI/mainwindow.py (make_check_current_tool)
1439            (_tool_command): Put the code that generates the "checked"
1440            callback into a separate function so that we can reuse it
1441            elsewhere
1442    
1443            * Thuban/Model/save.py (Saver): New class to handle serializing a
1444            session into an XML file. The main reason to introduce a class is
1445            that applications built on Thuban can derive from it so that they
1446            can save additional information in a session file.
1447            (save_session): Delegate almost all the work to the Saver class.
1448            Rename the filename argument to file because it may be a file like
1449            object now.
1450    
1451            * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
1452            code. Remove the little test code which would be executed when the
1453            module is run as a script which didn't work anymore since it can't
1454            import the other Thuban modules.
1455            (ProcessSession, load_session): Refactor the ProcessSession to
1456            have one method for each element start and end tag so that derived
1457            classes can easily override the processing of individual tags.
1458            Also, always parse with namespaces enabled because applications
1459            built on top of Thuban will likely use namespaces if they extend
1460            the session file format.
1461    
1462    2002-08-21  Bernhard Herzog  <[email protected]>
1463    
1464            * setup.py (ThubanInstall.run): Don't repr install_lib_orig
1465            because thubaninit_contents will do it for us.
1466    
1467    2002-08-16  Jan-Oliver Wagner <[email protected]>
1468    
1469            * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
1470            tree window already open
1471    
1472    2002-08-15  Bernhard Herzog  <[email protected]>
1473    
1474            * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
1475            with self.
1476    
1477            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
1478            when we have actually captured it.
1479    
1480            * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
1481            shapefile and destroy the table.
1482    
1483            * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
1484    
1485    2002-08-14  Bernhard Herzog  <[email protected]>
1486    
1487            * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
1488            instance variable columns
1489            (RecordTable.GetTypeName): row and col may be negative in some
1490            cases.
1491    
1492            * setup.py (InstallLocal.initialize_options)
1493            (InstallLocal.finalize_options, InstallLocal.user_options): New
1494            option create-init-file to build a thubaninit.py when running
1495            install_local
1496            (InstallLocal.run): Create the thubaninit.py module when requested
1497            (thubaninit_contents): Split the template into several parts and
1498            create a new function thubaninit_contents that creates the
1499            contents of a thubaninit module.
1500            (ThubanInstall.run): Use the new function to create the thubaninit
1501            module.
1502    
1503    2002-07-30  Bernhard Herzog  <[email protected]>
1504    
1505            * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
1506            cleanup.
1507            (ThubanApplication.MainLoop): Extend to automatically call OnExit.
1508    
1509            * Thuban/Model/session.py (Session.Destroy): Don't bypass the
1510            direct base class' Destroy method.
1511    
1512            * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
1513            layers.
1514            (Map.Destroy): Destroy the label_layer as well and call the
1515            inherited Desatroymethod first so that no more messages are
1516            issued.
1517            (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
1518            message if the stacking order actually has changed. Add
1519            doc-strings.
1520            (Map.BoundingBox): Correct the doc-string.
1521            (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
1522            (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
1523    
1524            * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
1525            all labels.
1526    
1527    2002-07-29  Bernhard Herzog  <[email protected]>
1528    
1529            * Thuban/Model/map.py (Map.subscribe_layer_channels)
1530            (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
1531            to a layer's channels into separate methods.
1532            (Map.RemoveLayer, Map.AddLayer): Call the new methods
1533            (Map.Destroy): Unsubscribe from a layer's channels before
1534            destroying it.
1535    
1536            * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
1537            selected_layer parameter to searched_layer which is the layer to
1538            search in.
1539            (MapCanvas.SelectShapeAt): New parameter layer to restrict the
1540            search to that layer. Return the selected layer and shape.
1541    
1542            * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
1543            typo
1544    
1545    2002-07-24  Bernhard Herzog  <[email protected]>
1546    
1547            * Thuban/UI/application.py (ThubanApplication.create_session):
1548            Extend the doc string.
1549            (ThubanApplication.subscribe_session)
1550            (ThubanApplication.unsubscribe_session): New methods to
1551            subscribe/unsubscribe to/from session channels.
1552            (ThubanApplication.SetSession): Call the new methods here.
1553            (ThubanApplication.maps_changed, ThubanApplication.set_map):
1554            Renamed set_map to maps_changed. Its now a subscriber for
1555            MAPS_CHANGED.
1556    
1557            * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
1558            x-coordinate in case of simple clicks
1559    
1560            * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
1561            don't pass it as a parameter
1562    
1563            * Thuban/Model/session.py (Session.RemoveMap): New
1564    
1565            * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
1566            window size into a parameter.
1567    
1568    2002-07-23  Bernhard Herzog  <[email protected]>
1569    
1570            * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1571            just commands.
1572    
1573            * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
1574            parameter list a bit to allow setting the window title and the
1575            initial message in the status bar. Update the callers.
1576    
1577            * Thuban/UI/application.py (ThubanApplication.OnInit)
1578            (ThubanApplication.CreateMainWindow): Put the mainwindow
1579            instantiation into a separate method so that it can be overridden
1580            by a subclass.
1581    
1582    2002-07-19  Bernhard Herzog  <[email protected]>
1583    
1584            * Thuban/Model/session.py: Issue a CHANGED message every time
1585            another changed message is issued to make it easier to get
1586            notified of changes.
1587            (Session): Update the doc string
1588            (Session.forward): Issue changed-events as CHANGED as well.
1589            (Session.changed): Overwrite the inherited version to issue
1590            CHANGED events as well.
1591    
1592            * Thuban/UI/tree.py: We can now simply subscribe to the session's
1593            CHANGED channel to be informed of changes.
1594            (SessionTreeCtrl.session_channels): Not needed any longer.
1595            (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1596            Only have to (un)subscribe CHANGED
1597    
1598            * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
1599    
1600            * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
1601            for the wxPython locale bug to __init__.py so that it's
1602            automatically executed by anybody using UI code from Thuban.
1603    
1604    2002-07-18  Bernhard Herzog  <[email protected]>
1605    
1606            * Thuban/UI/main.py (main): app no longer needs to be global
1607    
1608            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
1609            as parameter and store it in an instance variable
1610            (MainWindow.invoke_command, MainWindow.update_command_ui)
1611            (MainWindow.save_modified_session, MainWindow.NewSession)
1612            (MainWindow.OpenSession, MainWindow.SaveSession)
1613            (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
1614            application object.
1615    
1616            * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
1617            the main window with self.
1618    
1619            * Thuban/UI/context.py: New module with the context class
1620    
1621            * Thuban/UI/command.py (Command): Update doc string.
1622    
1623            * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
1624            MainWindow.update_command_ui): Pass an instance of the context
1625            class to the command's methods
1626            (check_current_tool, call_method): Handle the new context
1627            implementation
1628    
1629            * Examples/simple_extensions/simple_tool.py (simple_tool,
1630            check_simple_tool): Handle the new context implementation
1631    
1632            * Examples/simple_extensions/simple_command.py (simple_command):
1633            Handle the new context implementation. Update the comments about
1634            the context.
1635    
1636            * Thuban/UI/application.py (ThubanApplication.SetSession): Add
1637            doc-string
1638            (ThubanApplication.Session): New method to return the session
1639            object
1640    
1641            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
1642            interactor's selected_layer may not be a layer of the current
1643            session when the tree is updated while a new session is being set.
1644    
1645    2002-07-17  Bernhard Herzog  <[email protected]>
1646    
1647            * Thuban/UI/tree.py (color_string): Removed. No longer used.
1648            (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
1649            update_tree into update_tree and add_items. The tree now uses a
1650            more generic way to display the contents of the tree.
1651            (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
1652    
1653            * Thuban/Model/layer.py (Layer.TreeInfo),
1654            Thuban/Model/extension.py (Extension.TreeInfo),
1655            Thuban/Model/map.py (Map.TreeInfo),
1656            Thuban/Model/session.py (Session.TreeInfo):
1657            Add TreeInfo methods to implement the new tree view update scheme
1658    
1659    2002-07-16  Bernhard Herzog  <[email protected]>
1660    
1661            * Thuban/UI/application.py: Don't use "import from" for the
1662            MainWindow. It can't always be resolved.
1663            (ThubanApplication.OnInit): change reference to MainWindow
1664            accordingly.
1665    
1666            * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
1667            completely
1668    
1669    2002-07-10  Bernhard Herzog  <[email protected]>
1670    
1671            * setup.py (create_init_module): New configurable variable whose
1672            default depends on the platform we're running on.
1673            (ThubanInstall.initialize_options): Initialize
1674            self.create_init_module from the global create_init_module
1675            (ThubanInstall.user_options): indictate that the options
1676            create-init-module and init-module-dir have arguments.
1677    
1678            * setup.py: In the setup call change the version number to include
1679            cvs.
1680    
1681            * MANIFEST.in: Add the files in Examples
1682    
1683    2002-07-09  Bernhard Herzog  <[email protected]>
1684    
1685            * setup.py: In the setup call, use the thuban homepage as the
1686            value of the url parameter.
1687    
1688            * Examples: New subdirectory for examples.
1689    
1690            * Examples/simple_extensions/simple_tool.xpm,
1691            Examples/simple_extensions/simple_tool.py,
1692            Examples/simple_extensions/simple_command.py,
1693            Examples/simple_extensions/README: Simple examples showing how to
1694            add new commands and tools.
1695    
1696            * setup.cfg (bdist_rpm): Add the default value for prefix and tell
1697            bdist_rpm that we also have an install script.
1698            (bdist_inno): Add 2002 to the copyright notice.
1699    
1700            * setup.py: Create a file in python's site-packages directory to
1701            make installation of Thuban as a library easier.
1702            (ThubanInstall.user_options): Add two new options,
1703            create-init-module and init-module-dir
1704            (ThubanInstall.expand_with_pure_python_dirs): New method to expand
1705            filenames for installation in the default directories.
1706            (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
1707            the inherited methods to capture some filenames before they're
1708            transformed too much by distutils.
1709            (ThubanInstall.run): Create the init module if requested.
1710            (ThubanInstall.thuban_init_filename): New method to return the
1711            full name of the init module.
1712            (ThubanInstall.get_outputs): Append the filename of the init
1713            module.
1714    
1715    2002-07-08  Bernhard Herzog  <[email protected]>
1716    
1717            * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
1718            handle the prefix properly which means that the default for the
1719            installation prefix should be /usr for RPMs and /usr/local when
1720            doing a normal source install.
1721            (bdist_rpm_install_script): Script to override the default install
1722            commands in the specfile generated by the bdist_rpm command.
1723            (thuban_bdist_rpm.user_options): Add a prefix option
1724            (thuban_bdist_rpm.initialize_options): Init the prefix option.
1725            Create the script files for the spec files as empty files here
1726            (thuban_bdist_rpm._make_spec_file): Override the inherited method
1727            to fill the script files with content.
1728    
1729            * Thuban/Model/save.py (relative_filename): Wrapper around
1730            Thuban.Lib.fileutil.relative_filename that accepts an empty dir
1731            argument. save_session now automatically uses this version,
1732            solving a problem when saving to a relative filename.
1733    
1734            * setup.py: In the setup call, make sure that the library
1735            directories are under $prefix/lib not directly under $prefix.
1736    
1737    2002-06-20  Jan-Oliver Wagner <[email protected]>
1738    
1739          * Thuban/Model/extension.py: new module to handle extension objects.          * Thuban/Model/extension.py: new module to handle extension objects.
1740          * Thuban/Model/messages.py: new messages for extensions.          * Thuban/Model/messages.py: new messages for extensions.
# Line 11  Line 1747 
1747  2002-05-29  Bernhard Herzog  <[email protected]>  2002-05-29  Bernhard Herzog  <[email protected]>
1748    
1749          * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind          * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
1750          the events for a comnmand.          the events for a command.
1751          (MainWindow.add_toolbar_command, MainWindow.add_menu_command):          (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
1752          Call bind_command_events to bind the events. add_toolbar_command          Call bind_command_events to bind the events. add_toolbar_command
1753          can now bind events too so that it's possible to have commands          can now bind events too so that it's possible to have commands
# Line 227  Line 1963 
1963          * Thuban/UI/messages.py (VIEW_POSITION): New message for the          * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1964          position in the statusbar          position in the statusbar
1965    
1966  2002-04-26      Frank Koormann <[email protected]>  2002-04-26  Frank Koormann <[email protected]>
1967    
1968          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1969    
1970  2002-04-24      Frank Koormann <[email protected]>  2002-04-24  Frank Koormann <[email protected]>
1971            
1972          * Resources/Bitmaps/identify.xpm: shadow added          * Resources/Bitmaps/identify.xpm: shadow added
1973    
1974          * Resources/Bitmaps/fullextent.xpm: new          * Resources/Bitmaps/fullextent.xpm: new
           
 2002-04-22      Jan-Oliver Wagner <[email protected]>  
1975    
1976          * Thuban/UI/tree.py (update_tree): added test for None on map bounding box  2002-04-22  Jan-Oliver Wagner <[email protected]>
1977    
1978            * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1979            box
1980    
1981  2002-04-21      Jan-Oliver Wagner <[email protected]>  2002-04-21  Jan-Oliver Wagner <[email protected]>
1982    
1983          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1984    
1985          * Thuban/UI/tree.py (update_tree): added added map extent          * Thuban/UI/tree.py (update_tree): added added map extent
1986    
1987          * Thuban/UI/mainwindow.py (_method_command): extended by parameter          * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1988          icon; added map_full_extend as tool          icon; added map_full_extend as tool
1989    
1990  2002-04-19      Jan-Oliver Wagner <[email protected]>  2002-04-19  Jan-Oliver Wagner <[email protected]>
1991    
1992          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1993          saving _new_ sessions          saving _new_ sessions
# Line 352  Line 2089 
2089    
2090          * setup.py: increase version number to 0.1          * setup.py: increase version number to 0.1
2091          (data_dist): New command class for data distribution          (data_dist): New command class for data distribution
           
2092    
2093  2001-09-14  Bernhard Herzog  <[email protected]>  2001-09-14  Bernhard Herzog  <[email protected]>
2094    
2095          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
2096          Handle the case of no layer (i.e. layer is None) properly.          Handle the case of no layer (i.e. layer is None) properly.
2097    
2098          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
2099          Set the initial selection of the combo boxes to reflect the          Set the initial selection of the combo boxes to reflect the
2100          projection we're starting with in a way that works on windows,          projection we're starting with in a way that works on windows,
2101          too.          too.
# Line 469  Line 2205 
2205          (MainWindow.identify_view_on_demand): Store the interactor in an          (MainWindow.identify_view_on_demand): Store the interactor in an
2206          instvar and use that reference instead of going through main.app          instvar and use that reference instead of going through main.app
2207    
2208          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
2209          * Thuban/UI/application.py (ThubanApplication.OnInit):          * Thuban/UI/application.py (ThubanApplication.OnInit):
2210          * Thuban/UI/main.py (main): Create the session tree view in main          * Thuban/UI/main.py (main): Create the session tree view in main
2211          with the new mainwindow method ShowSessionTree and not directly          with the new mainwindow method ShowSessionTree and not directly
2212          the application's OnInit method          the application's OnInit method
# Line 486  Line 2222 
2222          layer to the tableview dialog.          layer to the tableview dialog.
2223    
2224          * Thuban/UI/tableview.py: Add some doc-strings          * Thuban/UI/tableview.py: Add some doc-strings
2225          (TableGrid):          (TableGrid):
2226          (TableGrid.OnRangeSelect):          (TableGrid.OnRangeSelect):
2227          (TableGrid.OnSelectCell):          (TableGrid.OnSelectCell):
2228          (TableFrame.__init__):          (TableFrame.__init__):
# Line 553  Line 2289 
2289  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
2290    
2291          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
2292            
2293          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
2294          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
2295            
2296          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
2297          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
2298          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 603  Line 2339 
2339          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
2340          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
2341          link_file method          link_file method
2342            
2343          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
2344          the window when the first layer is added to the map.          the window when the first layer is added to the map.
2345    
# Line 640  Line 2376 
2376          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
2377          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
2378          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
2379            
2380          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
2381          installer          installer
2382    

Legend:
Removed from v.199  
changed lines
  Added in v.673

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26