/[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 277 by bh, Fri Aug 23 15:25:14 2002 UTC revision 554 by jonathan, Tue Mar 25 16:20:51 2003 UTC
# Line 1  Line 1 
1    2003-03-25  Jonathan Coles   <[email protected]>
2    
3            * setup.py: Added custom script bdist_rpm_build_script so that
4            when the rpm is built the path to wx-config is correct.
5    
6            * setup.cfg: Added line saying to use the custom build script
7    
8    2003-03-20  Jonathan Coles   <[email protected]>
9    
10            Initial implementation of the Legend.
11    
12            * Thuban/UI/legend.py: New. Creates a window that shows the map's
13            Legend information and allows the user to add/modify classifications
14            and how the layers are drawn on the map.
15    
16            * setup.py: New command 'build_docs' which currently uses
17            happydoc to generate html documentation for Thuban.
18    
19            * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
20            Returns a string which is appropriately describes the group.
21    
22            * Thuban/Model/layer.py (Layer.SetClassification): Generate a
23            LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
24    
25            * Thuban/Model/map.py (Map): Rename messages and use new, more
26            specific, messages.
27    
28            * Thuban/Model/messages.py: New message to indicate that a layer's
29            data has changed (LAYER_CHANGED). New map messages to indicate
30            when layers have been added/removed/changed or if the stacking order
31            of the layers has changed.
32    
33            * Thuban/Model/session.py: Rename and use new messages.
34    
35            * Thuban/UI/classifier.py: Remember if any changes have actually
36            been applied so that if the dialog is cancelled without an application
37            of changes we don't have to set a new classification.
38            (ClassDataPreviewer): Pulled out the window specific code and put it
39            ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
40            symbols on any DC.
41            
42            * Thuban/UI/mainwindow.py: New code to open the legend.
43    
44            * Thuban/UI/view.py: Use new message names.
45    
46    2003-03-19  Jonathan Coles   <[email protected]>
47    
48            * Thuban/UI/main.py (verify_versions): New. Checks the versions
49            of Python, wxPython, and some other libraries.
50    
51            * extensions/thuban/wxproj.cpp (check_version): Checks the given
52            version against what wxproj was compiled with.
53            (check_version_gtk): If wxproj was compiled with gtk then check
54            the given version against the version of the gtk library
55            currently being used.
56    
57    2003-03-14  Bernhard Herzog  <[email protected]>
58    
59            * test/test_command.py: Run the tests when the module is run as a
60            script
61    
62    2003-03-14  Bernhard Herzog  <[email protected]>
63    
64            Implement selection of multiple selected shapes in the same layer:
65    
66            - Introduce a new class to hold the selection. This basically
67              replaces the interactor which was nothing more than the
68              selection anyway. A major difference is of course that the new
69              selection class supports multiple selected shapes in one layer
70            
71            - Move the object that represents the selection from the
72              application to the canvas. The canvas is a better place than the
73              application because the selection represents which shapes and
74              layer of the map displayed by the canvas are selected and
75              affects how the map is drawn.
76    
77            - Make the selection and its messages publicly available through
78              the mainwindow.
79    
80            - The non-modal dialogs do not get a reference to the interactor
81              anymore as they can simply refer to their parent, the
82              mainwindow, for the what the interactor had to offer.
83    
84            * Thuban/UI/selection.py: New module with a class to represent the
85            selection.
86    
87            * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
88            these unused messages
89    
90            * Thuban/UI/application.py (ThubanApplication.OnInit)
91            (ThubanApplication.OnExit, ThubanApplication.SetSession): The
92            interactor is gone now.
93            (ThubanApplication.CreateMainWindow): There is no interactor
94            anymore so we pass None as the interactor argument for now for
95            compatibility.
96    
97            * Thuban/UI/view.py (MapCanvas.delegated_messages)
98            (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
99            Unsubscribe, delegate messages according to the delegated_messages
100            class variable.
101            (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
102            attributes from instance variables as described with the
103            delegated_methods class variable.
104            (MapCanvas.__init__): New instance variable selection holding the
105            current selection
106            (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
107            pass them on to the renderer
108            (MapCanvas.SetMap): Clear the selection when a different map is
109            selected.
110            (MapCanvas.shape_selected): Simple force a complete redraw. The
111            selection class now takes care of only issueing SHAPES_SELECTED
112            messages when the set of selected shapes actually does change.
113            (MapCanvas.SelectShapeAt): The selection is now managed in
114            self.selection
115    
116            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
117            (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
118            Unsubscribe, delegate messages according to the delegated_messages
119            class variable.
120            (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
121            attributes from instance variables as described with the
122            delegated_methods class variable.
123            (MainWindow.__init__): The interactor as ivar is gone. The
124            parameter is still there for compatibility. The selection messages
125            now come from the canvas.
126            (MainWindow.current_layer, MainWindow.has_selected_layer):
127            Delegate to the the canvas.
128            (MainWindow.LayerShowTable, MainWindow.Classify)
129            (MainWindow.identify_view_on_demand): The dialogs don't need the
130            interactor parameter anymore.
131    
132            * Thuban/UI/tableview.py (TableFrame.__init__)
133            (LayerTableFrame.__init__, LayerTableFrame.OnClose)
134            (LayerTableFrame.row_selected): The interactor is gone. It's job
135            from the dialog's point of view is now done by the mainwindow,
136            i.e. the parent. Subscribe to SHAPES_SELECTED instead
137            of SELECTED_SHAPE
138            
139            * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
140            is gone. It's job from the dialog's point of view is now done by
141            the mainwindow, i.e. the parent.
142            
143            * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
144            gone. It's job from the dialog's point of view is now done by the
145            mainwindow, i.e. the parent.
146    
147            * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
148            gone. It's job from the dialog's point of view is now done by the
149            mainwindow, i.e. the parent.
150            (SessionTreeCtrl.__init__): New parameter mainwindow which is
151            stored as self.mainwindow. The mainwindow is need so that the tree
152            can still subscribe to the selection messages.
153            (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
154            (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
155            selection is now accessible through the mainwindow. Subscribe to
156            SHAPES_SELECTED instead of SELECTED_SHAPE
157    
158            * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
159            SHAPES_SELECTED message now.
160            (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
161            so deal with multiple shapes
162            (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
163            gone. It's job from the dialog's point of view is now done by the
164            mainwindow, i.e. the parent.
165    
166            * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
167            parameter is now a list of shape ids.
168            (RecordTable.SetTable): The second parameter is now a list of
169            indices.
170    
171            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
172            selected_shape parameter and ivar to selected_shapes. It's now a
173            list of shape ids.
174            (MapRenderer.draw_label_layer): Deal with multiple selected
175            shapes. Rearrange the code a bit so that the setup and shape type
176            distinctions are only executed once.
177    
178            * test/test_selection.py: Test cases for the selection class
179    
180    2003-03-11  Jonathan Coles   <[email protected]>
181    
182            * Thuban/Model/load.py: Temporary fix so that the xml reader
183            doesn't cause Thuban to crash.
184    
185            * Thuban/Model/layer.py: Handle the cyclic references between
186            a layer and its classification better, and be sure to disconnect
187            the classification from the layer when the layer is destroyed
188            so that we don't maintain a cyclic reference that may not be
189            garbage collected.
190    
191            * Thuban/Model/classification.py: See comment for layer.py.
192    
193    2003-03-12  Jan-Oliver Wagner <[email protected]>
194    
195            * HOWTO-Release: New. Information on the steps for releasing
196            a new version of Thuban.
197    
198    2003-03-11  Jonathan Coles   <[email protected]>
199    
200            * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
201            Use True instead of true.
202            (Classifier): Should have a single panel in which all the controls lie.
203    
204            * Thuban/UI/proj4dialog.py: Add normal border.
205    
206            * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
207    
208            * Thuban/UI/mainwindow.py: Use True instead of true.
209    
210            * setup.py: Update some definitions to use wxWindows2.4 files
211    
212            * Data/iceland_sample_class.thuban: Fixed file so that the
213            field_type information is present.
214    
215    2003-03-10  Jonathan Coles   <[email protected]>
216    
217            * Thuban/UI/classifier.py (Classifier.__init__): Make the
218            field type label grow so that when the text changes the
219            size is updated correctly. This may be a wxWindows bug.
220    
221    2003-03-10  Jonathan Coles   <[email protected]>
222    
223            * Thuban/UI/application.py: Changed SESSION_CHANGED to
224            SESSION_REPLACED.
225    
226            * Thuban/UI/classifier.py: Wrap text with _().
227            (ClassGrid.CreateTable): Set dimensions and size hints here,
228            instead of in Reset, so we only set the size once.
229    
230            * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
231    
232            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
233            Call Close() instead of Shutdown().
234    
235            * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
236    
237            * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
238            Go back to using OnClose() instead of Shutdown().
239    
240    2003-03-10  Jonathan Coles   <[email protected]>
241    
242            * Thuban/UI/classifier.py (Classifier): SelectField() needed
243            to know the old field index as well as the new one.
244    
245    2003-03-10  Jonathan Coles   <[email protected]>
246    
247            * Thuban/UI/classifier.py (Classifier): Use __SelectField()
248            to correctly set the table information and call this from
249            __init__ and from _OnFieldSelect so that all the information
250            is up to date when the dialog opens and when a field is changed.
251    
252    2003-03-10  Jonathan Coles   <[email protected]>
253    
254            * Thuban/Model/classification.py (Classification): Don't use
255            layer's message function directly, use the ClassChanged() method
256            when then classification changes. SetField/SetFieldType/SetLayer
257            must keep the information about field name and field type in
258            sync when an owning layer is set or removed.
259    
260            * Thuban/Model/layer.py: Added ClassChanged() so that the
261            classification can tell the layer when its data has changed.
262            (Layer.SetClassification): Accepts None as an arguement to
263            remove the current classification and correctly handles
264            adding a new classification.
265    
266            * Thuban/Model/load.py: Comment out print statement
267    
268            * test/test_classification.py, test/test_save.py: New and
269            improved tests.
270    
271    2003-03-07  Jonathan Coles   <[email protected]>
272    
273            * Thuban/Model/classification.py: Implemented __copy__ and
274            __deepcopy__ for ClassGroup* and ClassGroupProperites so
275            they can easily be copied by the classifier dialog.
276            (ClassGroupProperites.__init__): The default line color should
277            have been Color.Black.
278    
279            * Thuban/UI/classifier.py: Setting and Getting table values now
280            uses a consistent set of functions.
281            (Classifier): Now non-modal. Has field type label which changes
282            as the field changes. Keep track of buttons in a list so that
283            we can enable/disable the buttons when the None field is selected.
284            (SelectPropertiesDialog): Add buttons to make the colors transparent.
285    
286            * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
287            does what OnClose did, but can be called by the application to
288            close a window. Needed when a session changes, and we have to
289            close the classifier windows.
290    
291            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
292            Shuts down open dialogs. Used when a new session is created
293            or a session is opened.
294            (MainWindow.SaveSession): Should only call application.SaveSession()
295            if we don't call SaveSessionAs first.
296            (MainWindow.Classify): Allow different classifier dialogs for
297            different layers.
298    
299            * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
300            the parent class handle it. Add Shutdown() to unsubscibe from
301            event notification and call the parent Shutdown(). This was
302            necessary so the application can close the tree window.
303    
304    2003-03-06  Jonathan Coles   <[email protected]>
305    
306            * Thuban/Model/classification.py: Minor documentation changes,
307            Addition of __eq__ and __ne__ methods.
308            (Classification.SetLayer): prevent recursion between this method
309            and Layer.SetClassification().
310    
311            * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
312    
313            * Thuban/Model/layer.py (SetClassification): prevent recursion
314            between this method and Classification.SetLayer().
315    
316            * test/test_classification.py, test/test_load.py,
317            test/test_session.py: Fixed and added tests for the classification
318            classes.
319    
320    2003-03-06  Bernhard Herzog  <[email protected]>
321    
322            * Thuban/UI/classifier.py (ClassGrid.__init__)
323            (ClassGrid.CreateTable): Move the SetSelectionMode call to
324            CreateTable because otherwise it triggers an assertion in
325            wxPython/wxGTK 2.4.
326    
327    2003-03-05  Jonathan Coles   <[email protected]>
328    
329            * Thuban/common.py: Move FIELDTYPE constants back to table.py.
330    
331            * Thuban/Model/load.py: import FIELDTYPE constants from table.
332    
333            * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
334    
335            * Thuban/Model/table.py: Put FIELDTYPE constants back.
336    
337    2003-03-05  Jonathan Coles   <[email protected]>
338    
339            * Thuban/UI/classifier.py: Added class documentation.
340            Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
341            Store just the groups in the table and generate the other
342            column information when it is requested. Add "None" field
343            to pull-down to select no classification.
344    
345            * Thuban/common.py: Moved FIELDTYPE constants from table.py
346            (Str2Num): Only catch ValueError exceptions.
347    
348            * Thuban/Model/classification.py: Class documentation. Renaming
349            of methods with Stroke to Line. Groups are stored in a single
350            list with the default as the first element. Groups are searched
351            in the order they appear in the list.
352    
353            * Thuban/Model/color.py: Documentation.
354    
355            * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
356            the kind of data represented by a field.
357    
358            * Thuban/Model/load.py (ProcessSession): Use proper string
359            conversion function; fixes RTbug #1713.
360    
361            * Thuban/Model/save.py (Saver): Store field type information.
362    
363            * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
364            (Table): Add field_info_by_name() to retrieve field information
365            by specifying the field name, not the number.
366    
367            * Thuban/UI/mainwindow.py: Function name changes.
368    
369            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
370            get the layer classification once. Don't try to classify
371            values when the field is None: just use the default properties.
372    
373            * Thuban/UI/view.py: Function name changes.
374    
375            * Doc/thuban.dtd: Add field_type attribute to a classification.
376    
377    2003-03-04  Bernhard Herzog  <[email protected]>
378    
379            * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
380            the fill and stroke layer attributes optional with suitable
381            default values. Add the stroke_width layer attribute. Use correct
382            syntax for empty elements. Make the attribute list for labels
383            refer to the label element.
384    
385    2003-03-04  Bernhard Herzog  <[email protected]>
386    
387            * setup.py (thuban_build_py.build): Add a comment about distutils in
388            Python 2.3 containing some of the functionality we implement in
389            setup.py ourselves.
390    
391            * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
392            before the selection mode. Doing it the other way round triggers
393            an assertion in wxWindows.
394    
395            * Thuban/Model/save.py (escape): Fix typo in doc-string
396    
397            * Thuban/Model/classification.py: Remove unnecessary wxPython
398            import
399    
400    2003-03-04  Jonathan Coles   <[email protected]>
401    
402            * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
403            Parameter 'value' should default to None.
404    
405            * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
406            the class attribute __classification is now private.
407    
408            * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
409            Classifier to ClassGrid. Added support for removing selected rows,
410            which including code for keeping track of when cells are selected,
411            and deselected.
412            (ClassTable): Support for added/removing rows. Fixed a problem
413            with __ParseInput whereby it would not allow strings (only numbers)
414            to be entered.
415            (Classifier): Added button and supporting code for removing
416            selected rows.
417    
418    2003-02-27  Jonathan Coles   <[email protected]>
419    
420            * Thuban/common.py: Moved color conversion functions into
421            Thuban/UI/common.py.
422            (Str2Num): Now converts the float (not the string) to a long/int
423            so that an exception isn't thrown.
424    
425            * Thuban/UI/common.py: Common functions used in several UI modules
426    
427            * Thuban/Model/classification.py: Changed the class hierarchy
428            so that a Classification consists of Groups which return
429            Properties when a value matches a Group.
430    
431            * Thuban/Model/layer.py: Fixed name resolution problem.
432    
433            * Thuban/Model/load.py: Use new Classification and Group functions.
434    
435            * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
436            failure.
437            (Saver.write_classification): Use new Classification and Group
438            functions.
439    
440            * Thuban/UI/classifier.py: Changes to use new Classification and Group
441            functions. Fix to create a tuple with a single value instead of
442            simply returning the value.
443    
444            * Thuban/UI/renderer.py: Use new Classification and Group functions.
445            Use common.py functions.
446    
447            * Thuban/UI/tree.py: Use common.py functions.
448            
449            * test/test_classification.py: Use new Classification and Group
450            classes.
451    
452    2003-02-24  Jonathan Coles   <[email protected]>
453    
454            * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
455            functions from Thuban color objects to wxWindow colour objects.
456    
457            * Thuban/Model/classification.py (Classification): Renamed
458            GetProperties() to GetClassData(). Used the new iterator
459            in TreeInfo().
460            (ClassIterator): Iterator implementation to iterate over the
461            ClassData objects in a classification object.
462    
463            * Thuban/Model/save.py (Saver.write_classificaton): Uses
464            the new iterator to save the classification information.
465    
466            * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
467            for changing the stroke and fill colors and previewing the
468            changes.
469    
470            * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
471            MainWindow.SaveSessionAs): Text string changes so the dialogs
472            have more meaningful titles.
473    
474            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
475            Classification method name from GetProperties to GetClassData.
476    
477            * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
478            instead of accessing now non-existent class variables.
479    
480    2003-02-24  Bernhard Herzog  <[email protected]>
481    
482            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
483            unneeded Shape() call. Rendering is substantially faster without
484            it and it avoids some problems with broken shape files.
485    
486    2003-02-20  Frank Koormann   <[email protected]>
487    
488            Force minimal size of identify and label dialogs. The autosizing
489            looked too ugly.
490    
491            * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
492            * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
493            Set size of listctrl.
494            * Thuban/UI/identifyview.py (IdentifyView.__init__):
495            Set size of dialog.
496    
497    2003-02-19  Jonathan Coles   <[email protected]>
498    
499            * test/test_classification.py, test/test_layer.py,
500            test/test_load.py, test/test_map.py, test/test_session.py:
501            Updated the tests to use the new functions that are in the
502            respective classes.
503    
504            * Thuban/Model/classification.py (Classification):
505            Uses the new ClassData* classes. Modification messages are
506            passed up to the parent layer (if it exists).
507            (ClassData): New class to encapsulate the common data in each
508            classification property.
509            (ClassDataDefault): Represents the Default class. data.
510            (ClassDataPoint): Represents a single class. data point
511            (ClassDataRange): Represents a class. range
512            (ClassDataMap): Represents a class. map (unused).
513    
514            * Thuban/Model/color.py: Added Color.None to represent something
515            with no color. Color.Black represents the color black.
516            (NoColor): Helper class derived from Color to represent something
517            with no color.
518    
519            * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
520            stroke_width attributes. Made the 'classification' attribute private.
521            New methods for setting/getting the classification.
522    
523            * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
524            to get the classifcation and use the new ClassData* classes to
525            hold the classification data. Use Str2Num to convert numbers
526            properly.
527    
528            * Thuban/Model/save.py (Saver): Use new Color and Classification
529            methods
530    
531            * Thuban/UI/classifier.py (ClassGrid): New class to represent a
532            custom grid.
533            (ClassTable): Support for editing Values and Labels and for
534            changing what type (point or range) of data is stored in each
535            property based on how the user enters the data.
536            (Classifier): Support for saving the new classifications and
537            launching the dialog to edit a property.
538            (SelectPropertiesDialog): New class for editing the visual
539            properties of a classification (stroke color, width, and fill color)
540            (ClassPreviewer): Took the Draw method from ClassRenderer and
541            made most of it into this new class. Intend to use this class in
542            the SelectPropertiesDialog for previewing changes.
543    
544            * Thuban/UI/renderer.py: Use new Color and Classification methods.
545    
546            * Thuban/UI/tree.py: Formatting changes.
547    
548            * Doc/thuban.dtd: Add 'label' element
549    
550            * Thuban/common.py: New. Contains common routines used throughout
551            the code.
552            (Str2Num): Takes a string and converts it to the "best" type of
553            number.
554    
555    2003-02-14  Bernhard Herzog  <[email protected]>
556    
557            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
558            dragging flag is always set to 0 even when the tool implementation
559            raises an exception
560    
561    2003-02-11  Bernhard Herzog  <[email protected]>
562    
563            * Thuban/UI/application.py (ThubanApplication.splash_screen): New
564            method to create a splash screen.
565            (ThubanApplication.ShowMainWindow): New. Show the main window.
566            Needed so the splash screen can display the mainwindow
567            (ThubanApplication.OnInit): Call the
568            new splash_screen method to determine whether the application
569            should display a splash screen. If it displays a splash screen do
570            not immediately show the main window.
571    
572    2003-02-11  Jonathan Coles  <[email protected]>
573    
574            * Thuban/Model/classification.py: Added import line to fix
575            feature conflicts between running on python2.2 and python2.1.
576    
577            * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
578            onto the clinfo parameter, so removed the deepcopy().
579    
580    2003-02-10  Jonathan Coles  <[email protected]>
581    
582            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
583            Added element_open variable to track opening and closing of tags
584            so that tags that don't span more than one line are closed with
585            /> instead of </tag_name>. Use the GetDefault*() methods of
586            the Classification class.
587    
588            * Thuban/Model/classification.py (Classificaton): Added set and
589            get methods for the default data. The class also takes a layer
590            reference so that modification messages can be sent. Fixed the
591            methods to use the new ClassData class.
592            (ClassData): New class to encapsulate the classification data
593    
594            * Thuban/Model/layer.py (Layer): Remove the
595            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
596            SetDefault*() methods on the layer's classification object.
597            (Layer.__init__): Use the new SetDefault*() methods in the
598            Classification class.
599    
600            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
601            object instead of a dictionary.
602    
603            * Thuban/UI/classifier.py (ClassRenderer): New class to
604            draw the classifications in the dialog box's table.
605            (Classifier): Modified to use the ClassRenderer class.
606    
607            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
608            methods of the Classification class.
609    
610            * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
611            of the ClassData class.
612    
613            * test/test_classification.py, test/test_layer.py,
614            test/test_map.py, test/test_session.py: Fix the tests to work
615            with the above code changes.
616    
617    2003-02-03  Jonathan Coles  <[email protected]>
618    
619            * Thuban/Model/classification.py (Classification): Added getNull()
620            to return the NullData reference
621    
622            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
623            Layer.SetStrokeWidth): Modified these functions to change the
624            null data in the classification rather than keep these values
625            directly in the Layer class. Menu options to change these values
626            work again.
627    
628    2003-01-28  Jonathan Coles  <[email protected]>
629    
630            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
631            Fixed crashing problem on some systems. Dialog box shows
632            classification data.
633    
634            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
635            Colors in the tree view.
636    
637            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
638            the tree info for classifications. Commented out unnecessary lines.
639    
640            * Thuban/Model/classification.py (Classification.TreeInfo): New
641            function to add information about the classification into the
642            tree view.
643    
644    2003-01-27  Jan-Oliver Wagner <[email protected]>
645    
646            * Thuban/__init__.py (_): New.
647    
648            * Thuban/Model/classification.py, Thuban/Model/extension.py,
649            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
650            Thuban/Model/session.py, Thuban/UI/application.py,
651            Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
652            Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
653            Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
654            Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
655            Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
656    
657    2003-01-27  Jonathan Coles  <[email protected]>
658    
659            * Thuban/Model/layer.py: Classification initialization calls.
660    
661            * Thuban/Model/classification.py: Created class to encapsulate
662            a layer classification. Supports specific data points and
663            ranges.
664    
665            * Thuban/Model/load.py: Added support for loading classification
666            information.
667    
668            * Thuban/Model/save.py: Added support for saving classification
669            information.
670    
671            * Thuban/UI/classifier.py: Initial class for a dialog box for
672            specifying classification information.
673    
674            * Thuban/UI/mainwindows.py: Support for opening the classifier
675            dialog.
676    
677            * Thuban/UI/renderer.py: Support for drawing a layer with the
678            classification information.
679    
680            * Data/iceland_sample_class.thuban: iceland_sample with
681            classification data.
682    
683            * test/test_classification: Tests for the Classification class.
684    
685    2002-12-09  Bernhard Herzog  <[email protected]>
686    
687            * test/test_command.py: New. Tests for the command classes.
688    
689            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
690            (Command.IsTool): New method to distinguish between command
691            switching tools and other commands.
692    
693            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
694            the tool to avoid direct assignments to instance variables
695            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
696            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
697            change the tool
698    
699            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
700            active tool's command turns insensitive, disable the tool.
701            (_tool_command): Use the new ToolCommand class
702    
703            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
704            SelectTool method to change the tool
705            (iconfile): Use the ToolCommand class
706    
707    2002-12-03  Bernhard Herzog  <[email protected]>
708    
709            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
710            the case of selected items that are not children of Layers or Maps
711            properly. Previously this bug would trigger an assertion in
712            wxWindows.
713    
714    2002-11-06  Frank Koormann  <[email protected]>
715    
716            * Thuban/UI/mainwindow.py: Altered the order of tools in the
717            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
718            Full Extent).
719    
720    2002-10-23  Bernhard Herzog  <[email protected]>
721    
722            * setup.py (setup call): version now 0.1.3
723    
724            * MANIFEST.in: Add the files in test/
725    
726            * test/README: Add note about tests requiring the iceland data
727    
728            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
729            copyright notice.
730    
731    2002-10-18  Bernhard Herzog  <[email protected]>
732    
733            * test/test_map.py
734            (TestMapWithContents.test_projected_bounding_box): Use an explicit
735            epsilon.
736    
737            * test/support.py (FloatComparisonMixin.assertFloatEqual)
738            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
739            message if the assertion fails and don't return the return value
740            of self.assert_. In assertFloatSeqEqual the return meant that not
741            all items of the sequence were compared.
742    
743    2002-09-20  Bernhard Herzog  <[email protected]>
744    
745            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
746    
747            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
748    
749            * test/test_map.py (TestMapWithContents.test_tree_info): Create
750            the string with the bounding box on the fly because of platform
751            differences in the way %g is handled.
752    
753            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
754            DBFfile too because Thuban layers can't yet cope missing DBF
755            files.
756    
757    2002-09-20  Bernhard Herzog  <[email protected]>
758    
759            * test/test_menu.py: Use initthuban instead of
760            add_thuban_dir_to_path to initialize Thuban.
761    
762            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
763            Mixin class for float comparisons
764            (SubscriberMixin): New. Mixin class to test messages sent through
765            the Connector class
766    
767            * test/README: Fix a typo and add the -v flag to the command for
768            individual tests
769    
770            * test/test_session.py: New. Test cases for Thuban.Model.session
771    
772            * test/test_proj.py: New. Test cases for Thuban.Model.proj
773    
774            * test/test_map.py: New. Test cases for Thuban.Model.map
775    
776            * test/test_layer.py: New. Test cases for Thuban.Model.layer
777    
778            * test/test_label.py: New. Test cases for Thuban.Model.label
779    
780            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
781    
782            * test/test_color.py: New. Test cases for Thuban.Model.color
783    
784            * test/test_base.py: New. Test cases for Thuban.Model.base
785    
786    2002-09-13  Bernhard Herzog  <[email protected]>
787    
788            * Thuban/Model/session.py (Session.forwarded_channels): Forward
789            the CHANGED channel too.
790    
791            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
792            CHANGED channel too.
793            (Map.__init__): Call the Modifiable constructor as well.
794    
795            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
796            event if the modified flag changes.
797            (Modifiable.changed): Tweak the doc-string.
798    
799            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
800            (MainWindow.set_position_text): Put the code that puts the text
801            with the mouse position into the status bar into the new method
802            set_position_text so that it can overwritten in derived classes.
803    
804    2002-09-12  Bernhard Herzog  <[email protected]>
805    
806            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
807            message box on the main window.
808    
809    2002-09-11  Bernhard Herzog  <[email protected]>
810    
811            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
812            the 'E' because it's less likely to interfere with other menu
813            entries.
814            (MainWindow.build_menu): remove an incorrect comment.
815    
816    2002-09-10  Bernhard Herzog  <[email protected]>
817    
818            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
819            (_tool_command): Add sensitive parameter
820            (_has_visible_map): Sensitivity callback to tools and other
821            commands that require a visible map. Use it in map_zoom_in_tool,
822            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
823            and map_full_extent
824    
825    2002-09-06  Bernhard Herzog  <[email protected]>
826    
827            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
828            VIEW_POSITION
829    
830    2002-09-04  Frank Koormann  <[email protected]>
831    
832            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
833    
834    2002-09-02  Bernhard Herzog  <[email protected]>
835    
836            * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
837            wxWindows already and our implementation doesn't work correctly
838            with wxGTK 2.3:
839            (MapCanvas.__init__): Remove the instance variable
840            (MapCanvas.OnPaint): Always call do_redraw when there's a map to
841            be drawin
842            (MapCanvas.OnIdle): Removed.
843    
844            * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
845            a parameter to determine the size of the rectangle.
846            (MapCanvas.find_shape_at): Create the box around the point on a
847            layer by layer basis and make the size depend on the shape type.
848            This solves a problem with the selection of point shapes at the
849            border of the layer's bounding box
850    
851    2002-08-30  Bernhard Herzog  <[email protected]>
852    
853            * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
854            for the sensitivity  of remove layer.
855            (_can_remove_layer): New. Sensitivity callback for remove layer
856            (Command layer_remove): Use _can_remove_layer
857    
858            * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
859            determine whether a given layer can be deleted.
860    
861            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
862            (MapCanvas.do_redraw): Get rid of the unused update_region
863            instance variable
864    
865            * Thuban/UI/view.py: Add/update some doc-strings.
866    
867            * test/: new subdirectory with a bunch of unit tests.
868    
869            * test/README, test/test_table.py, test/test_save.py,
870            test/test_menu.py, test/test_load.py: Initial set of tests and
871            brief instructions on how to run them
872    
873    2002-08-29  Bernhard Herzog  <[email protected]>
874    
875            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
876            arcs with multiple parts.
877    
878            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
879            Handle degenrate rectangles.
880    
881            * Thuban/Model/table.py: Make writing records work correctly:
882            (Table.__init__): Keep track of whether the DBF is open for
883            writing
884            (Table.write_record): Open the DBF file for writing when necessary
885    
886    2002-08-27  Bernhard Herzog  <[email protected]>
887    
888            * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
889            dbf files only for reading by default. Use a new writable dbf
890            object for writing.
891    
892    2002-08-26  Bernhard Herzog  <[email protected]>
893    
894            * Thuban/UI/mainwindow.py: Refactor the context creation:
895            (MainWindow.Context): New method to return a context
896            (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
897            new method
898    
899            * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
900            layer table specific code from TableGrid into LayerTableGrid
901            (TableFrame, LayerTableFrame): Split the layer table specific code
902            from TableFrame into LayerTableFrame
903            (LayerTableGrid.select_shape): Remove a debug print
904    
905            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
906            LayerTableFrame
907    
908  2002-08-23  Bernhard Herzog  <[email protected]>  2002-08-23  Bernhard Herzog  <[email protected]>
909    
910          * Thuban/Model/layer.py (Layer.__init__): Make sure we have an          * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
# Line 7  Line 914 
914    
915          * Thuban/Model/table.py (Table.write_record): New method to write          * Thuban/Model/table.py (Table.write_record): New method to write
916          records.          records.
917          (Table.__init__): Open the DBF file for writing too.          (Table.__init__): Open the DBF file for writing too.
918    
919          * Thuban/UI/controls.py (RecordTable.SetValue): Write the value          * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
920          into the underlying table.          into the underlying table.
# Line 45  Line 952 
952          * setup.py (ThubanInstall.run): Don't repr install_lib_orig          * setup.py (ThubanInstall.run): Don't repr install_lib_orig
953          because thubaninit_contents will do it for us.          because thubaninit_contents will do it for us.
954    
955  2002-08-16      Jan-Oliver Wagner <[email protected]>  2002-08-16  Jan-Oliver Wagner <[email protected]>
956    
957          * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if          * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
958          tree window already open          tree window already open
# Line 173  Line 1080 
1080          * Thuban/UI/tree.py: We can now simply subscribe to the session's          * Thuban/UI/tree.py: We can now simply subscribe to the session's
1081          CHANGED channel to be informed of changes.          CHANGED channel to be informed of changes.
1082          (SessionTreeCtrl.session_channels): Not needed any longer.          (SessionTreeCtrl.session_channels): Not needed any longer.
1083          (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):          (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1084          Only have to (un)subscribe CHANGED          Only have to (un)subscribe CHANGED
1085    
1086          * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.          * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
# Line 234  Line 1141 
1141          * Thuban/Model/layer.py (Layer.TreeInfo),          * Thuban/Model/layer.py (Layer.TreeInfo),
1142          Thuban/Model/extension.py (Extension.TreeInfo),          Thuban/Model/extension.py (Extension.TreeInfo),
1143          Thuban/Model/map.py (Map.TreeInfo),          Thuban/Model/map.py (Map.TreeInfo),
1144          Thuban/Model/session.py (Session.TreeInfo):          Thuban/Model/session.py (Session.TreeInfo):
1145          Add TreeInfo methods to implement the new tree view update scheme          Add TreeInfo methods to implement the new tree view update scheme
1146    
1147  2002-07-16  Bernhard Herzog  <[email protected]>  2002-07-16  Bernhard Herzog  <[email protected]>
# Line 315  Line 1222 
1222          * setup.py: In the setup call, make sure that the library          * setup.py: In the setup call, make sure that the library
1223          directories are under $prefix/lib not directly under $prefix.          directories are under $prefix/lib not directly under $prefix.
1224    
1225  2002-06-20      Jan-Oliver Wagner <[email protected]>  2002-06-20  Jan-Oliver Wagner <[email protected]>
1226    
1227          * Thuban/Model/extension.py: new module to handle extension objects.          * Thuban/Model/extension.py: new module to handle extension objects.
1228          * Thuban/Model/messages.py: new messages for extensions.          * Thuban/Model/messages.py: new messages for extensions.
# Line 544  Line 1451 
1451          * Thuban/UI/messages.py (VIEW_POSITION): New message for the          * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1452          position in the statusbar          position in the statusbar
1453    
1454  2002-04-26      Frank Koormann <[email protected]>  2002-04-26  Frank Koormann <[email protected]>
1455    
1456          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1457    
1458  2002-04-24      Frank Koormann <[email protected]>  2002-04-24  Frank Koormann <[email protected]>
1459            
1460          * Resources/Bitmaps/identify.xpm: shadow added          * Resources/Bitmaps/identify.xpm: shadow added
1461    
1462          * Resources/Bitmaps/fullextent.xpm: new          * Resources/Bitmaps/fullextent.xpm: new
           
 2002-04-22      Jan-Oliver Wagner <[email protected]>  
1463    
1464          * Thuban/UI/tree.py (update_tree): added test for None on map bounding box  2002-04-22  Jan-Oliver Wagner <[email protected]>
1465    
1466  2002-04-21      Jan-Oliver Wagner <[email protected]>          * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1467            box
1468    
1469    2002-04-21  Jan-Oliver Wagner <[email protected]>
1470    
1471          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1472    
1473          * Thuban/UI/tree.py (update_tree): added added map extent          * Thuban/UI/tree.py (update_tree): added added map extent
1474    
1475          * Thuban/UI/mainwindow.py (_method_command): extended by parameter          * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1476          icon; added map_full_extend as tool          icon; added map_full_extend as tool
1477    
1478  2002-04-19      Jan-Oliver Wagner <[email protected]>  2002-04-19  Jan-Oliver Wagner <[email protected]>
1479    
1480          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1481          saving _new_ sessions          saving _new_ sessions
# Line 669  Line 1577 
1577    
1578          * setup.py: increase version number to 0.1          * setup.py: increase version number to 0.1
1579          (data_dist): New command class for data distribution          (data_dist): New command class for data distribution
           
1580    
1581  2001-09-14  Bernhard Herzog  <[email protected]>  2001-09-14  Bernhard Herzog  <[email protected]>
1582    
1583          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1584          Handle the case of no layer (i.e. layer is None) properly.          Handle the case of no layer (i.e. layer is None) properly.
1585    
1586          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1587          Set the initial selection of the combo boxes to reflect the          Set the initial selection of the combo boxes to reflect the
1588          projection we're starting with in a way that works on windows,          projection we're starting with in a way that works on windows,
1589          too.          too.
# Line 786  Line 1693 
1693          (MainWindow.identify_view_on_demand): Store the interactor in an          (MainWindow.identify_view_on_demand): Store the interactor in an
1694          instvar and use that reference instead of going through main.app          instvar and use that reference instead of going through main.app
1695    
1696          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1697          * Thuban/UI/application.py (ThubanApplication.OnInit):          * Thuban/UI/application.py (ThubanApplication.OnInit):
1698          * Thuban/UI/main.py (main): Create the session tree view in main          * Thuban/UI/main.py (main): Create the session tree view in main
1699          with the new mainwindow method ShowSessionTree and not directly          with the new mainwindow method ShowSessionTree and not directly
1700          the application's OnInit method          the application's OnInit method
# Line 803  Line 1710 
1710          layer to the tableview dialog.          layer to the tableview dialog.
1711    
1712          * Thuban/UI/tableview.py: Add some doc-strings          * Thuban/UI/tableview.py: Add some doc-strings
1713          (TableGrid):          (TableGrid):
1714          (TableGrid.OnRangeSelect):          (TableGrid.OnRangeSelect):
1715          (TableGrid.OnSelectCell):          (TableGrid.OnSelectCell):
1716          (TableFrame.__init__):          (TableFrame.__init__):
# Line 870  Line 1777 
1777  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
1778    
1779          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1780            
1781          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1782          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
1783            
1784          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1785          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
1786          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 920  Line 1827 
1827          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
1828          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
1829          link_file method          link_file method
1830            
1831          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1832          the window when the first layer is added to the map.          the window when the first layer is added to the map.
1833    
# Line 957  Line 1864 
1864          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
1865          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1866          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
1867            
1868          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
1869          installer          installer
1870    

Legend:
Removed from v.277  
changed lines
  Added in v.554

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26