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

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

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

revision 408 by jonathan, Wed Feb 19 16:49:49 2003 UTC revision 552 by jonathan, Thu Mar 20 09:45:43 2003 UTC
# Line 1  Line 1 
1    2003-03-20  Jonathan Coles   <[email protected]>
2    
3            Initial implementation of the Legend.
4    
5            * Thuban/UI/legend.py: New. Creates a window that shows the map's
6            Legend information and allows the user to add/modify classifications
7            and how the layers are drawn on the map.
8    
9            * setup.py: New command 'build_docs' which currently uses
10            happydoc to generate html documentation for Thuban.
11    
12            * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
13            Returns a string which is appropriately describes the group.
14    
15            * Thuban/Model/layer.py (Layer.SetClassification): Generate a
16            LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
17    
18            * Thuban/Model/map.py (Map): Rename messages and use new, more
19            specific, messages.
20    
21            * Thuban/Model/messages.py: New message to indicate that a layer's
22            data has changed (LAYER_CHANGED). New map messages to indicate
23            when layers have been added/removed/changed or if the stacking order
24            of the layers has changed.
25    
26            * Thuban/Model/session.py: Rename and use new messages.
27    
28            * Thuban/UI/classifier.py: Remember if any changes have actually
29            been applied so that if the dialog is cancelled without an application
30            of changes we don't have to set a new classification.
31            (ClassDataPreviewer): Pulled out the window specific code and put it
32            ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
33            symbols on any DC.
34            
35            * Thuban/UI/mainwindow.py: New code to open the legend.
36    
37            * Thuban/UI/view.py: Use new message names.
38    
39    2003-03-19  Jonathan Coles   <[email protected]>
40    
41            * Thuban/UI/main.py (verify_versions): New. Checks the versions
42            of Python, wxPython, and some other libraries.
43    
44            * extensions/thuban/wxproj.cpp (check_version): Checks the given
45            version against what wxproj was compiled with.
46            (check_version_gtk): If wxproj was compiled with gtk then check
47            the given version against the version of the gtk library
48            currently being used.
49    
50    2003-03-14  Bernhard Herzog  <[email protected]>
51    
52            * test/test_command.py: Run the tests when the module is run as a
53            script
54    
55    2003-03-14  Bernhard Herzog  <[email protected]>
56    
57            Implement selection of multiple selected shapes in the same layer:
58    
59            - Introduce a new class to hold the selection. This basically
60              replaces the interactor which was nothing more than the
61              selection anyway. A major difference is of course that the new
62              selection class supports multiple selected shapes in one layer
63            
64            - Move the object that represents the selection from the
65              application to the canvas. The canvas is a better place than the
66              application because the selection represents which shapes and
67              layer of the map displayed by the canvas are selected and
68              affects how the map is drawn.
69    
70            - Make the selection and its messages publicly available through
71              the mainwindow.
72    
73            - The non-modal dialogs do not get a reference to the interactor
74              anymore as they can simply refer to their parent, the
75              mainwindow, for the what the interactor had to offer.
76    
77            * Thuban/UI/selection.py: New module with a class to represent the
78            selection.
79    
80            * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
81            these unused messages
82    
83            * Thuban/UI/application.py (ThubanApplication.OnInit)
84            (ThubanApplication.OnExit, ThubanApplication.SetSession): The
85            interactor is gone now.
86            (ThubanApplication.CreateMainWindow): There is no interactor
87            anymore so we pass None as the interactor argument for now for
88            compatibility.
89    
90            * Thuban/UI/view.py (MapCanvas.delegated_messages)
91            (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
92            Unsubscribe, delegate messages according to the delegated_messages
93            class variable.
94            (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
95            attributes from instance variables as described with the
96            delegated_methods class variable.
97            (MapCanvas.__init__): New instance variable selection holding the
98            current selection
99            (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
100            pass them on to the renderer
101            (MapCanvas.SetMap): Clear the selection when a different map is
102            selected.
103            (MapCanvas.shape_selected): Simple force a complete redraw. The
104            selection class now takes care of only issueing SHAPES_SELECTED
105            messages when the set of selected shapes actually does change.
106            (MapCanvas.SelectShapeAt): The selection is now managed in
107            self.selection
108    
109            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
110            (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
111            Unsubscribe, delegate messages according to the delegated_messages
112            class variable.
113            (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
114            attributes from instance variables as described with the
115            delegated_methods class variable.
116            (MainWindow.__init__): The interactor as ivar is gone. The
117            parameter is still there for compatibility. The selection messages
118            now come from the canvas.
119            (MainWindow.current_layer, MainWindow.has_selected_layer):
120            Delegate to the the canvas.
121            (MainWindow.LayerShowTable, MainWindow.Classify)
122            (MainWindow.identify_view_on_demand): The dialogs don't need the
123            interactor parameter anymore.
124    
125            * Thuban/UI/tableview.py (TableFrame.__init__)
126            (LayerTableFrame.__init__, LayerTableFrame.OnClose)
127            (LayerTableFrame.row_selected): The interactor is gone. It's job
128            from the dialog's point of view is now done by the mainwindow,
129            i.e. the parent. Subscribe to SHAPES_SELECTED instead
130            of SELECTED_SHAPE
131            
132            * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
133            is gone. It's job from the dialog's point of view is now done by
134            the mainwindow, i.e. the parent.
135            
136            * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
137            gone. It's job from the dialog's point of view is now done by the
138            mainwindow, i.e. the parent.
139    
140            * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
141            gone. It's job from the dialog's point of view is now done by the
142            mainwindow, i.e. the parent.
143            (SessionTreeCtrl.__init__): New parameter mainwindow which is
144            stored as self.mainwindow. The mainwindow is need so that the tree
145            can still subscribe to the selection messages.
146            (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
147            (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
148            selection is now accessible through the mainwindow. Subscribe to
149            SHAPES_SELECTED instead of SELECTED_SHAPE
150    
151            * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
152            SHAPES_SELECTED message now.
153            (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
154            so deal with multiple shapes
155            (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
156            gone. It's job from the dialog's point of view is now done by the
157            mainwindow, i.e. the parent.
158    
159            * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
160            parameter is now a list of shape ids.
161            (RecordTable.SetTable): The second parameter is now a list of
162            indices.
163    
164            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
165            selected_shape parameter and ivar to selected_shapes. It's now a
166            list of shape ids.
167            (MapRenderer.draw_label_layer): Deal with multiple selected
168            shapes. Rearrange the code a bit so that the setup and shape type
169            distinctions are only executed once.
170    
171            * test/test_selection.py: Test cases for the selection class
172    
173    2003-03-11  Jonathan Coles   <[email protected]>
174    
175            * Thuban/Model/load.py: Temporary fix so that the xml reader
176            doesn't cause Thuban to crash.
177    
178            * Thuban/Model/layer.py: Handle the cyclic references between
179            a layer and its classification better, and be sure to disconnect
180            the classification from the layer when the layer is destroyed
181            so that we don't maintain a cyclic reference that may not be
182            garbage collected.
183    
184            * Thuban/Model/classification.py: See comment for layer.py.
185    
186    2003-03-12  Jan-Oliver Wagner <[email protected]>
187    
188            * HOWTO-Release: New. Information on the steps for releasing
189            a new version of Thuban.
190    
191    2003-03-11  Jonathan Coles   <[email protected]>
192    
193            * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
194            Use True instead of true.
195            (Classifier): Should have a single panel in which all the controls lie.
196    
197            * Thuban/UI/proj4dialog.py: Add normal border.
198    
199            * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
200    
201            * Thuban/UI/mainwindow.py: Use True instead of true.
202    
203            * setup.py: Update some definitions to use wxWindows2.4 files
204    
205            * Data/iceland_sample_class.thuban: Fixed file so that the
206            field_type information is present.
207    
208    2003-03-10  Jonathan Coles   <[email protected]>
209    
210            * Thuban/UI/classifier.py (Classifier.__init__): Make the
211            field type label grow so that when the text changes the
212            size is updated correctly. This may be a wxWindows bug.
213    
214    2003-03-10  Jonathan Coles   <[email protected]>
215    
216            * Thuban/UI/application.py: Changed SESSION_CHANGED to
217            SESSION_REPLACED.
218    
219            * Thuban/UI/classifier.py: Wrap text with _().
220            (ClassGrid.CreateTable): Set dimensions and size hints here,
221            instead of in Reset, so we only set the size once.
222    
223            * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
224    
225            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
226            Call Close() instead of Shutdown().
227    
228            * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
229    
230            * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
231            Go back to using OnClose() instead of Shutdown().
232    
233    2003-03-10  Jonathan Coles   <[email protected]>
234    
235            * Thuban/UI/classifier.py (Classifier): SelectField() needed
236            to know the old field index as well as the new one.
237    
238    2003-03-10  Jonathan Coles   <[email protected]>
239    
240            * Thuban/UI/classifier.py (Classifier): Use __SelectField()
241            to correctly set the table information and call this from
242            __init__ and from _OnFieldSelect so that all the information
243            is up to date when the dialog opens and when a field is changed.
244    
245    2003-03-10  Jonathan Coles   <[email protected]>
246    
247            * Thuban/Model/classification.py (Classification): Don't use
248            layer's message function directly, use the ClassChanged() method
249            when then classification changes. SetField/SetFieldType/SetLayer
250            must keep the information about field name and field type in
251            sync when an owning layer is set or removed.
252    
253            * Thuban/Model/layer.py: Added ClassChanged() so that the
254            classification can tell the layer when its data has changed.
255            (Layer.SetClassification): Accepts None as an arguement to
256            remove the current classification and correctly handles
257            adding a new classification.
258    
259            * Thuban/Model/load.py: Comment out print statement
260    
261            * test/test_classification.py, test/test_save.py: New and
262            improved tests.
263    
264    2003-03-07  Jonathan Coles   <[email protected]>
265    
266            * Thuban/Model/classification.py: Implemented __copy__ and
267            __deepcopy__ for ClassGroup* and ClassGroupProperites so
268            they can easily be copied by the classifier dialog.
269            (ClassGroupProperites.__init__): The default line color should
270            have been Color.Black.
271    
272            * Thuban/UI/classifier.py: Setting and Getting table values now
273            uses a consistent set of functions.
274            (Classifier): Now non-modal. Has field type label which changes
275            as the field changes. Keep track of buttons in a list so that
276            we can enable/disable the buttons when the None field is selected.
277            (SelectPropertiesDialog): Add buttons to make the colors transparent.
278    
279            * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
280            does what OnClose did, but can be called by the application to
281            close a window. Needed when a session changes, and we have to
282            close the classifier windows.
283    
284            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
285            Shuts down open dialogs. Used when a new session is created
286            or a session is opened.
287            (MainWindow.SaveSession): Should only call application.SaveSession()
288            if we don't call SaveSessionAs first.
289            (MainWindow.Classify): Allow different classifier dialogs for
290            different layers.
291    
292            * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
293            the parent class handle it. Add Shutdown() to unsubscibe from
294            event notification and call the parent Shutdown(). This was
295            necessary so the application can close the tree window.
296    
297    2003-03-06  Jonathan Coles   <[email protected]>
298    
299            * Thuban/Model/classification.py: Minor documentation changes,
300            Addition of __eq__ and __ne__ methods.
301            (Classification.SetLayer): prevent recursion between this method
302            and Layer.SetClassification().
303    
304            * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
305    
306            * Thuban/Model/layer.py (SetClassification): prevent recursion
307            between this method and Classification.SetLayer().
308    
309            * test/test_classification.py, test/test_load.py,
310            test/test_session.py: Fixed and added tests for the classification
311            classes.
312    
313    2003-03-06  Bernhard Herzog  <[email protected]>
314    
315            * Thuban/UI/classifier.py (ClassGrid.__init__)
316            (ClassGrid.CreateTable): Move the SetSelectionMode call to
317            CreateTable because otherwise it triggers an assertion in
318            wxPython/wxGTK 2.4.
319    
320    2003-03-05  Jonathan Coles   <[email protected]>
321    
322            * Thuban/common.py: Move FIELDTYPE constants back to table.py.
323    
324            * Thuban/Model/load.py: import FIELDTYPE constants from table.
325    
326            * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
327    
328            * Thuban/Model/table.py: Put FIELDTYPE constants back.
329    
330    2003-03-05  Jonathan Coles   <[email protected]>
331    
332            * Thuban/UI/classifier.py: Added class documentation.
333            Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
334            Store just the groups in the table and generate the other
335            column information when it is requested. Add "None" field
336            to pull-down to select no classification.
337    
338            * Thuban/common.py: Moved FIELDTYPE constants from table.py
339            (Str2Num): Only catch ValueError exceptions.
340    
341            * Thuban/Model/classification.py: Class documentation. Renaming
342            of methods with Stroke to Line. Groups are stored in a single
343            list with the default as the first element. Groups are searched
344            in the order they appear in the list.
345    
346            * Thuban/Model/color.py: Documentation.
347    
348            * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
349            the kind of data represented by a field.
350    
351            * Thuban/Model/load.py (ProcessSession): Use proper string
352            conversion function; fixes RTbug #1713.
353    
354            * Thuban/Model/save.py (Saver): Store field type information.
355    
356            * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
357            (Table): Add field_info_by_name() to retrieve field information
358            by specifying the field name, not the number.
359    
360            * Thuban/UI/mainwindow.py: Function name changes.
361    
362            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
363            get the layer classification once. Don't try to classify
364            values when the field is None: just use the default properties.
365    
366            * Thuban/UI/view.py: Function name changes.
367    
368            * Doc/thuban.dtd: Add field_type attribute to a classification.
369    
370    2003-03-04  Bernhard Herzog  <[email protected]>
371    
372            * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
373            the fill and stroke layer attributes optional with suitable
374            default values. Add the stroke_width layer attribute. Use correct
375            syntax for empty elements. Make the attribute list for labels
376            refer to the label element.
377    
378    2003-03-04  Bernhard Herzog  <[email protected]>
379    
380            * setup.py (thuban_build_py.build): Add a comment about distutils in
381            Python 2.3 containing some of the functionality we implement in
382            setup.py ourselves.
383    
384            * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
385            before the selection mode. Doing it the other way round triggers
386            an assertion in wxWindows.
387    
388            * Thuban/Model/save.py (escape): Fix typo in doc-string
389    
390            * Thuban/Model/classification.py: Remove unnecessary wxPython
391            import
392    
393    2003-03-04  Jonathan Coles   <[email protected]>
394    
395            * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
396            Parameter 'value' should default to None.
397    
398            * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
399            the class attribute __classification is now private.
400    
401            * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
402            Classifier to ClassGrid. Added support for removing selected rows,
403            which including code for keeping track of when cells are selected,
404            and deselected.
405            (ClassTable): Support for added/removing rows. Fixed a problem
406            with __ParseInput whereby it would not allow strings (only numbers)
407            to be entered.
408            (Classifier): Added button and supporting code for removing
409            selected rows.
410    
411    2003-02-27  Jonathan Coles   <[email protected]>
412    
413            * Thuban/common.py: Moved color conversion functions into
414            Thuban/UI/common.py.
415            (Str2Num): Now converts the float (not the string) to a long/int
416            so that an exception isn't thrown.
417    
418            * Thuban/UI/common.py: Common functions used in several UI modules
419    
420            * Thuban/Model/classification.py: Changed the class hierarchy
421            so that a Classification consists of Groups which return
422            Properties when a value matches a Group.
423    
424            * Thuban/Model/layer.py: Fixed name resolution problem.
425    
426            * Thuban/Model/load.py: Use new Classification and Group functions.
427    
428            * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
429            failure.
430            (Saver.write_classification): Use new Classification and Group
431            functions.
432    
433            * Thuban/UI/classifier.py: Changes to use new Classification and Group
434            functions. Fix to create a tuple with a single value instead of
435            simply returning the value.
436    
437            * Thuban/UI/renderer.py: Use new Classification and Group functions.
438            Use common.py functions.
439    
440            * Thuban/UI/tree.py: Use common.py functions.
441            
442            * test/test_classification.py: Use new Classification and Group
443            classes.
444    
445    2003-02-24  Jonathan Coles   <[email protected]>
446    
447            * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
448            functions from Thuban color objects to wxWindow colour objects.
449    
450            * Thuban/Model/classification.py (Classification): Renamed
451            GetProperties() to GetClassData(). Used the new iterator
452            in TreeInfo().
453            (ClassIterator): Iterator implementation to iterate over the
454            ClassData objects in a classification object.
455    
456            * Thuban/Model/save.py (Saver.write_classificaton): Uses
457            the new iterator to save the classification information.
458    
459            * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
460            for changing the stroke and fill colors and previewing the
461            changes.
462    
463            * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
464            MainWindow.SaveSessionAs): Text string changes so the dialogs
465            have more meaningful titles.
466    
467            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
468            Classification method name from GetProperties to GetClassData.
469    
470            * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
471            instead of accessing now non-existent class variables.
472    
473    2003-02-24  Bernhard Herzog  <[email protected]>
474    
475            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
476            unneeded Shape() call. Rendering is substantially faster without
477            it and it avoids some problems with broken shape files.
478    
479    2003-02-20  Frank Koormann   <[email protected]>
480    
481            Force minimal size of identify and label dialogs. The autosizing
482            looked too ugly.
483    
484            * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
485            * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
486            Set size of listctrl.
487            * Thuban/UI/identifyview.py (IdentifyView.__init__):
488            Set size of dialog.
489    
490  2003-02-19  Jonathan Coles   <[email protected]>  2003-02-19  Jonathan Coles   <[email protected]>
491    
492          * test/test_classification.py, test/test_layer.py,          * test/test_classification.py, test/test_layer.py,

Legend:
Removed from v.408  
changed lines
  Added in v.552

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26