/[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 202 by bh, Mon Jul 8 10:51:14 2002 UTC revision 477 by bh, Thu Mar 6 15:03:48 2003 UTC
# Line 1  Line 1 
1    2003-03-06  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/UI/classifier.py (ClassGrid.__init__)
4            (ClassGrid.CreateTable): Move the SetSelectionMode call to
5            CreateTable because otherwise it triggers an assertion in
6            wxPython/wxGTK 2.4.
7    
8    2003-03-05  Jonathan Coles   <[email protected]>
9    
10            * Thuban/common.py: Move FIELDTYPE constants back to table.py.
11    
12            * Thuban/Model/load.py: import FIELDTYPE constants from table.
13    
14            * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
15    
16            * Thuban/Model/table.py: Put FIELDTYPE constants back.
17    
18    2003-03-05  Jonathan Coles   <[email protected]>
19    
20            * Thuban/UI/classifier.py: Added class documentation.
21            Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
22            Store just the groups in the table and generate the other
23            column information when it is requested. Add "None" field
24            to pull-down to select no classification.
25    
26            * Thuban/common.py: Moved FIELDTYPE constants from table.py
27            (Str2Num): Only catch ValueError exceptions.
28    
29            * Thuban/Model/classification.py: Class documentation. Renaming
30            of methods with Stroke to Line. Groups are stored in a single
31            list with the default as the first element. Groups are searched
32            in the order they appear in the list.
33    
34            * Thuban/Model/color.py: Documentation.
35    
36            * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
37            the kind of data represented by a field.
38    
39            * Thuban/Model/load.py (ProcessSession): Use proper string
40            conversion function; fixes RTbug #1713.
41    
42            * Thuban/Model/save.py (Saver): Store field type information.
43    
44            * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
45            (Table): Add field_info_by_name() to retrieve field information
46            by specifying the field name, not the number.
47    
48            * Thuban/UI/mainwindow.py: Function name changes.
49    
50            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
51            get the layer classification once. Don't try to classify
52            values when the field is None: just use the default properties.
53    
54            * Thuban/UI/view.py: Function name changes.
55    
56            * Doc/thuban.dtd: Add field_type attribute to a classification.
57    
58    2003-03-04  Bernhard Herzog  <[email protected]>
59    
60            * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
61            the fill and stroke layer attributes optional with suitable
62            default values. Add the stroke_width layer attribute. Use correct
63            syntax for empty elements. Make the attribute list for labels
64            refer to the label element.
65    
66    2003-03-04  Bernhard Herzog  <[email protected]>
67    
68            * setup.py (thuban_build_py.build): Add a comment about distutils in
69            Python 2.3 containing some of the functionality we implement in
70            setup.py ourselves.
71    
72            * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
73            before the selection mode. Doing it the other way round triggers
74            an assertion in wxWindows.
75    
76            * Thuban/Model/save.py (escape): Fix typo in doc-string
77    
78            * Thuban/Model/classification.py: Remove unnecessary wxPython
79            import
80    
81    2003-03-04  Jonathan Coles   <[email protected]>
82    
83            * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
84            Parameter 'value' should default to None.
85    
86            * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
87            the class attribute __classification is now private.
88    
89            * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
90            Classifier to ClassGrid. Added support for removing selected rows,
91            which including code for keeping track of when cells are selected,
92            and deselected.
93            (ClassTable): Support for added/removing rows. Fixed a problem
94            with __ParseInput whereby it would not allow strings (only numbers)
95            to be entered.
96            (Classifier): Added button and supporting code for removing
97            selected rows.
98    
99    2003-02-27  Jonathan Coles   <[email protected]>
100    
101            * Thuban/common.py: Moved color conversion functions into
102            Thuban/UI/common.py.
103            (Str2Num): Now converts the float (not the string) to a long/int
104            so that an exception isn't thrown.
105    
106            * Thuban/UI/common.py: Common functions used in several UI modules
107    
108            * Thuban/Model/classification.py: Changed the class hierarchy
109            so that a Classification consists of Groups which return
110            Properties when a value matches a Group.
111    
112            * Thuban/Model/layer.py: Fixed name resolution problem.
113    
114            * Thuban/Model/load.py: Use new Classification and Group functions.
115    
116            * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
117            failure.
118            (Saver.write_classification): Use new Classification and Group
119            functions.
120    
121            * Thuban/UI/classifier.py: Changes to use new Classification and Group
122            functions. Fix to create a tuple with a single value instead of
123            simply returning the value.
124    
125            * Thuban/UI/renderer.py: Use new Classification and Group functions.
126            Use common.py functions.
127    
128            * Thuban/UI/tree.py: Use common.py functions.
129            
130            * test/test_classification.py: Use new Classification and Group
131            classes.
132    
133    2003-02-24  Jonathan Coles   <[email protected]>
134    
135            * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
136            functions from Thuban color objects to wxWindow colour objects.
137    
138            * Thuban/Model/classification.py (Classification): Renamed
139            GetProperties() to GetClassData(). Used the new iterator
140            in TreeInfo().
141            (ClassIterator): Iterator implementation to iterate over the
142            ClassData objects in a classification object.
143    
144            * Thuban/Model/save.py (Saver.write_classificaton): Uses
145            the new iterator to save the classification information.
146    
147            * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
148            for changing the stroke and fill colors and previewing the
149            changes.
150    
151            * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
152            MainWindow.SaveSessionAs): Text string changes so the dialogs
153            have more meaningful titles.
154    
155            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
156            Classification method name from GetProperties to GetClassData.
157    
158            * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
159            instead of accessing now non-existent class variables.
160    
161    2003-02-24  Bernhard Herzog  <[email protected]>
162    
163            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
164            unneeded Shape() call. Rendering is substantially faster without
165            it and it avoids some problems with broken shape files.
166    
167    2003-02-20  Frank Koormann   <[email protected]>
168    
169            Force minimal size of identify and label dialogs. The autosizing
170            looked too ugly.
171    
172            * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
173            * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
174            Set size of listctrl.
175            * Thuban/UI/identifyview.py (IdentifyView.__init__):
176            Set size of dialog.
177    
178    2003-02-19  Jonathan Coles   <[email protected]>
179    
180            * test/test_classification.py, test/test_layer.py,
181            test/test_load.py, test/test_map.py, test/test_session.py:
182            Updated the tests to use the new functions that are in the
183            respective classes.
184    
185            * Thuban/Model/classification.py (Classification):
186            Uses the new ClassData* classes. Modification messages are
187            passed up to the parent layer (if it exists).
188            (ClassData): New class to encapsulate the common data in each
189            classification property.
190            (ClassDataDefault): Represents the Default class. data.
191            (ClassDataPoint): Represents a single class. data point
192            (ClassDataRange): Represents a class. range
193            (ClassDataMap): Represents a class. map (unused).
194    
195            * Thuban/Model/color.py: Added Color.None to represent something
196            with no color. Color.Black represents the color black.
197            (NoColor): Helper class derived from Color to represent something
198            with no color.
199    
200            * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
201            stroke_width attributes. Made the 'classification' attribute private.
202            New methods for setting/getting the classification.
203    
204            * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
205            to get the classifcation and use the new ClassData* classes to
206            hold the classification data. Use Str2Num to convert numbers
207            properly.
208    
209            * Thuban/Model/save.py (Saver): Use new Color and Classification
210            methods
211    
212            * Thuban/UI/classifier.py (ClassGrid): New class to represent a
213            custom grid.
214            (ClassTable): Support for editing Values and Labels and for
215            changing what type (point or range) of data is stored in each
216            property based on how the user enters the data.
217            (Classifier): Support for saving the new classifications and
218            launching the dialog to edit a property.
219            (SelectPropertiesDialog): New class for editing the visual
220            properties of a classification (stroke color, width, and fill color)
221            (ClassPreviewer): Took the Draw method from ClassRenderer and
222            made most of it into this new class. Intend to use this class in
223            the SelectPropertiesDialog for previewing changes.
224    
225            * Thuban/UI/renderer.py: Use new Color and Classification methods.
226    
227            * Thuban/UI/tree.py: Formatting changes.
228    
229            * Doc/thuban.dtd: Add 'label' element
230    
231            * Thuban/common.py: New. Contains common routines used throughout
232            the code.
233            (Str2Num): Takes a string and converts it to the "best" type of
234            number.
235    
236    2003-02-14  Bernhard Herzog  <[email protected]>
237    
238            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
239            dragging flag is always set to 0 even when the tool implementation
240            raises an exception
241    
242    2003-02-11  Bernhard Herzog  <[email protected]>
243    
244            * Thuban/UI/application.py (ThubanApplication.splash_screen): New
245            method to create a splash screen.
246            (ThubanApplication.ShowMainWindow): New. Show the main window.
247            Needed so the splash screen can display the mainwindow
248            (ThubanApplication.OnInit): Call the
249            new splash_screen method to determine whether the application
250            should display a splash screen. If it displays a splash screen do
251            not immediately show the main window.
252    
253    2003-02-11  Jonathan Coles  <[email protected]>
254    
255            * Thuban/Model/classification.py: Added import line to fix
256            feature conflicts between running on python2.2 and python2.1.
257    
258            * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
259            onto the clinfo parameter, so removed the deepcopy().
260    
261    2003-02-10  Jonathan Coles  <[email protected]>
262    
263            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
264            Added element_open variable to track opening and closing of tags
265            so that tags that don't span more than one line are closed with
266            /> instead of </tag_name>. Use the GetDefault*() methods of
267            the Classification class.
268    
269            * Thuban/Model/classification.py (Classificaton): Added set and
270            get methods for the default data. The class also takes a layer
271            reference so that modification messages can be sent. Fixed the
272            methods to use the new ClassData class.
273            (ClassData): New class to encapsulate the classification data
274    
275            * Thuban/Model/layer.py (Layer): Remove the
276            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
277            SetDefault*() methods on the layer's classification object.
278            (Layer.__init__): Use the new SetDefault*() methods in the
279            Classification class.
280    
281            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
282            object instead of a dictionary.
283    
284            * Thuban/UI/classifier.py (ClassRenderer): New class to
285            draw the classifications in the dialog box's table.
286            (Classifier): Modified to use the ClassRenderer class.
287    
288            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
289            methods of the Classification class.
290    
291            * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
292            of the ClassData class.
293    
294            * test/test_classification.py, test/test_layer.py,
295            test/test_map.py, test/test_session.py: Fix the tests to work
296            with the above code changes.
297    
298    2003-02-03  Jonathan Coles  <[email protected]>
299    
300            * Thuban/Model/classification.py (Classification): Added getNull()
301            to return the NullData reference
302    
303            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
304            Layer.SetStrokeWidth): Modified these functions to change the
305            null data in the classification rather than keep these values
306            directly in the Layer class. Menu options to change these values
307            work again.
308    
309    2003-01-28  Jonathan Coles  <[email protected]>
310    
311            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
312            Fixed crashing problem on some systems. Dialog box shows
313            classification data.
314    
315            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
316            Colors in the tree view.
317    
318            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
319            the tree info for classifications. Commented out unnecessary lines.
320    
321            * Thuban/Model/classification.py (Classification.TreeInfo): New
322            function to add information about the classification into the
323            tree view.
324    
325    2003-01-27  Jan-Oliver Wagner <[email protected]>
326    
327            * Thuban/__init__.py (_): New.
328    
329            * Thuban/Model/classification.py, Thuban/Model/extension.py,
330            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
331            Thuban/Model/session.py, Thuban/UI/application.py,
332            Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
333            Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
334            Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
335            Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
336            Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
337    
338    2003-01-27  Jonathan Coles  <[email protected]>
339    
340            * Thuban/Model/layer.py: Classification initialization calls.
341    
342            * Thuban/Model/classification.py: Created class to encapsulate
343            a layer classification. Supports specific data points and
344            ranges.
345    
346            * Thuban/Model/load.py: Added support for loading classification
347            information.
348    
349            * Thuban/Model/save.py: Added support for saving classification
350            information.
351    
352            * Thuban/UI/classifier.py: Initial class for a dialog box for
353            specifying classification information.
354    
355            * Thuban/UI/mainwindows.py: Support for opening the classifier
356            dialog.
357    
358            * Thuban/UI/renderer.py: Support for drawing a layer with the
359            classification information.
360    
361            * Data/iceland_sample_class.thuban: iceland_sample with
362            classification data.
363    
364            * test/test_classification: Tests for the Classification class.
365    
366    2002-12-09  Bernhard Herzog  <[email protected]>
367    
368            * test/test_command.py: New. Tests for the command classes.
369    
370            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
371            (Command.IsTool): New method to distinguish between command
372            switching tools and other commands.
373    
374            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
375            the tool to avoid direct assignments to instance variables
376            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
377            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
378            change the tool
379    
380            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
381            active tool's command turns insensitive, disable the tool.
382            (_tool_command): Use the new ToolCommand class
383    
384            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
385            SelectTool method to change the tool
386            (iconfile): Use the ToolCommand class
387    
388    2002-12-03  Bernhard Herzog  <[email protected]>
389    
390            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
391            the case of selected items that are not children of Layers or Maps
392            properly. Previously this bug would trigger an assertion in
393            wxWindows.
394    
395    2002-11-06  Frank Koormann  <[email protected]>
396    
397            * Thuban/UI/mainwindow.py: Altered the order of tools in the
398            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
399            Full Extent).
400    
401    2002-10-23  Bernhard Herzog  <[email protected]>
402    
403            * setup.py (setup call): version now 0.1.3
404    
405            * MANIFEST.in: Add the files in test/
406    
407            * test/README: Add note about tests requiring the iceland data
408    
409            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
410            copyright notice.
411    
412    2002-10-18  Bernhard Herzog  <[email protected]>
413    
414            * test/test_map.py
415            (TestMapWithContents.test_projected_bounding_box): Use an explicit
416            epsilon.
417    
418            * test/support.py (FloatComparisonMixin.assertFloatEqual)
419            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
420            message if the assertion fails and don't return the return value
421            of self.assert_. In assertFloatSeqEqual the return meant that not
422            all items of the sequence were compared.
423    
424    2002-09-20  Bernhard Herzog  <[email protected]>
425    
426            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
427    
428            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
429    
430            * test/test_map.py (TestMapWithContents.test_tree_info): Create
431            the string with the bounding box on the fly because of platform
432            differences in the way %g is handled.
433    
434            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
435            DBFfile too because Thuban layers can't yet cope missing DBF
436            files.
437    
438    2002-09-20  Bernhard Herzog  <[email protected]>
439    
440            * test/test_menu.py: Use initthuban instead of
441            add_thuban_dir_to_path to initialize Thuban.
442    
443            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
444            Mixin class for float comparisons
445            (SubscriberMixin): New. Mixin class to test messages sent through
446            the Connector class
447    
448            * test/README: Fix a typo and add the -v flag to the command for
449            individual tests
450    
451            * test/test_session.py: New. Test cases for Thuban.Model.session
452    
453            * test/test_proj.py: New. Test cases for Thuban.Model.proj
454    
455            * test/test_map.py: New. Test cases for Thuban.Model.map
456    
457            * test/test_layer.py: New. Test cases for Thuban.Model.layer
458    
459            * test/test_label.py: New. Test cases for Thuban.Model.label
460    
461            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
462    
463            * test/test_color.py: New. Test cases for Thuban.Model.color
464    
465            * test/test_base.py: New. Test cases for Thuban.Model.base
466    
467    2002-09-13  Bernhard Herzog  <[email protected]>
468    
469            * Thuban/Model/session.py (Session.forwarded_channels): Forward
470            the CHANGED channel too.
471    
472            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
473            CHANGED channel too.
474            (Map.__init__): Call the Modifiable constructor as well.
475    
476            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
477            event if the modified flag changes.
478            (Modifiable.changed): Tweak the doc-string.
479    
480            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
481            (MainWindow.set_position_text): Put the code that puts the text
482            with the mouse position into the status bar into the new method
483            set_position_text so that it can overwritten in derived classes.
484    
485    2002-09-12  Bernhard Herzog  <[email protected]>
486    
487            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
488            message box on the main window.
489    
490    2002-09-11  Bernhard Herzog  <[email protected]>
491    
492            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
493            the 'E' because it's less likely to interfere with other menu
494            entries.
495            (MainWindow.build_menu): remove an incorrect comment.
496    
497    2002-09-10  Bernhard Herzog  <[email protected]>
498    
499            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
500            (_tool_command): Add sensitive parameter
501            (_has_visible_map): Sensitivity callback to tools and other
502            commands that require a visible map. Use it in map_zoom_in_tool,
503            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
504            and map_full_extent
505    
506    2002-09-06  Bernhard Herzog  <[email protected]>
507    
508            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
509            VIEW_POSITION
510    
511    2002-09-04  Frank Koormann  <[email protected]>
512    
513            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
514    
515    2002-09-02  Bernhard Herzog  <[email protected]>
516    
517            * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
518            wxWindows already and our implementation doesn't work correctly
519            with wxGTK 2.3:
520            (MapCanvas.__init__): Remove the instance variable
521            (MapCanvas.OnPaint): Always call do_redraw when there's a map to
522            be drawin
523            (MapCanvas.OnIdle): Removed.
524    
525            * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
526            a parameter to determine the size of the rectangle.
527            (MapCanvas.find_shape_at): Create the box around the point on a
528            layer by layer basis and make the size depend on the shape type.
529            This solves a problem with the selection of point shapes at the
530            border of the layer's bounding box
531    
532    2002-08-30  Bernhard Herzog  <[email protected]>
533    
534            * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
535            for the sensitivity  of remove layer.
536            (_can_remove_layer): New. Sensitivity callback for remove layer
537            (Command layer_remove): Use _can_remove_layer
538    
539            * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
540            determine whether a given layer can be deleted.
541    
542            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
543            (MapCanvas.do_redraw): Get rid of the unused update_region
544            instance variable
545    
546            * Thuban/UI/view.py: Add/update some doc-strings.
547    
548            * test/: new subdirectory with a bunch of unit tests.
549    
550            * test/README, test/test_table.py, test/test_save.py,
551            test/test_menu.py, test/test_load.py: Initial set of tests and
552            brief instructions on how to run them
553    
554    2002-08-29  Bernhard Herzog  <[email protected]>
555    
556            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
557            arcs with multiple parts.
558    
559            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
560            Handle degenrate rectangles.
561    
562            * Thuban/Model/table.py: Make writing records work correctly:
563            (Table.__init__): Keep track of whether the DBF is open for
564            writing
565            (Table.write_record): Open the DBF file for writing when necessary
566    
567    2002-08-27  Bernhard Herzog  <[email protected]>
568    
569            * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
570            dbf files only for reading by default. Use a new writable dbf
571            object for writing.
572    
573    2002-08-26  Bernhard Herzog  <[email protected]>
574    
575            * Thuban/UI/mainwindow.py: Refactor the context creation:
576            (MainWindow.Context): New method to return a context
577            (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
578            new method
579    
580            * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
581            layer table specific code from TableGrid into LayerTableGrid
582            (TableFrame, LayerTableFrame): Split the layer table specific code
583            from TableFrame into LayerTableFrame
584            (LayerTableGrid.select_shape): Remove a debug print
585    
586            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
587            LayerTableFrame
588    
589    2002-08-23  Bernhard Herzog  <[email protected]>
590    
591            * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
592            absolute filename.
593    
594    2002-08-22  Bernhard Herzog  <[email protected]>
595    
596            * Thuban/Model/table.py (Table.write_record): New method to write
597            records.
598            (Table.__init__): Open the DBF file for writing too.
599    
600            * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
601            into the underlying table.
602    
603            * extensions/shapelib/shapefil.h (DBFCommit),
604            extensions/shapelib/dbfopen.c (DBFCommit): New API function to
605            commit any changes made to the DBF file.
606    
607            * Thuban/UI/mainwindow.py (make_check_current_tool)
608            (_tool_command): Put the code that generates the "checked"
609            callback into a separate function so that we can reuse it
610            elsewhere
611    
612            * Thuban/Model/save.py (Saver): New class to handle serializing a
613            session into an XML file. The main reason to introduce a class is
614            that applications built on Thuban can derive from it so that they
615            can save additional information in a session file.
616            (save_session): Delegate almost all the work to the Saver class.
617            Rename the filename argument to file because it may be a file like
618            object now.
619    
620            * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
621            code. Remove the little test code which would be executed when the
622            module is run as a script which didn't work anymore since it can't
623            import the other Thuban modules.
624            (ProcessSession, load_session): Refactor the ProcessSession to
625            have one method for each element start and end tag so that derived
626            classes can easily override the processing of individual tags.
627            Also, always parse with namespaces enabled because applications
628            built on top of Thuban will likely use namespaces if they extend
629            the session file format.
630    
631    2002-08-21  Bernhard Herzog  <[email protected]>
632    
633            * setup.py (ThubanInstall.run): Don't repr install_lib_orig
634            because thubaninit_contents will do it for us.
635    
636    2002-08-16  Jan-Oliver Wagner <[email protected]>
637    
638            * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
639            tree window already open
640    
641    2002-08-15  Bernhard Herzog  <[email protected]>
642    
643            * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
644            with self.
645    
646            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
647            when we have actually captured it.
648    
649            * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
650            shapefile and destroy the table.
651    
652            * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
653    
654    2002-08-14  Bernhard Herzog  <[email protected]>
655    
656            * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
657            instance variable columns
658            (RecordTable.GetTypeName): row and col may be negative in some
659            cases.
660    
661            * setup.py (InstallLocal.initialize_options)
662            (InstallLocal.finalize_options, InstallLocal.user_options): New
663            option create-init-file to build a thubaninit.py when running
664            install_local
665            (InstallLocal.run): Create the thubaninit.py module when requested
666            (thubaninit_contents): Split the template into several parts and
667            create a new function thubaninit_contents that creates the
668            contents of a thubaninit module.
669            (ThubanInstall.run): Use the new function to create the thubaninit
670            module.
671    
672    2002-07-30  Bernhard Herzog  <[email protected]>
673    
674            * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
675            cleanup.
676            (ThubanApplication.MainLoop): Extend to automatically call OnExit.
677    
678            * Thuban/Model/session.py (Session.Destroy): Don't bypass the
679            direct base class' Destroy method.
680    
681            * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
682            layers.
683            (Map.Destroy): Destroy the label_layer as well and call the
684            inherited Desatroymethod first so that no more messages are
685            issued.
686            (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
687            message if the stacking order actually has changed. Add
688            doc-strings.
689            (Map.BoundingBox): Correct the doc-string.
690            (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
691            (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
692    
693            * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
694            all labels.
695    
696    2002-07-29  Bernhard Herzog  <[email protected]>
697    
698            * Thuban/Model/map.py (Map.subscribe_layer_channels)
699            (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
700            to a layer's channels into separate methods.
701            (Map.RemoveLayer, Map.AddLayer): Call the new methods
702            (Map.Destroy): Unsubscribe from a layer's channels before
703            destroying it.
704    
705            * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
706            selected_layer parameter to searched_layer which is the layer to
707            search in.
708            (MapCanvas.SelectShapeAt): New parameter layer to restrict the
709            search to that layer. Return the selected layer and shape.
710    
711            * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
712            typo
713    
714    2002-07-24  Bernhard Herzog  <[email protected]>
715    
716            * Thuban/UI/application.py (ThubanApplication.create_session):
717            Extend the doc string.
718            (ThubanApplication.subscribe_session)
719            (ThubanApplication.unsubscribe_session): New methods to
720            subscribe/unsubscribe to/from session channels.
721            (ThubanApplication.SetSession): Call the new methods here.
722            (ThubanApplication.maps_changed, ThubanApplication.set_map):
723            Renamed set_map to maps_changed. Its now a subscriber for
724            MAPS_CHANGED.
725    
726            * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
727            x-coordinate in case of simple clicks
728    
729            * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
730            don't pass it as a parameter
731    
732            * Thuban/Model/session.py (Session.RemoveMap): New
733    
734            * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
735            window size into a parameter.
736    
737    2002-07-23  Bernhard Herzog  <[email protected]>
738    
739            * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
740            just commands.
741    
742            * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
743            parameter list a bit to allow setting the window title and the
744            initial message in the status bar. Update the callers.
745    
746            * Thuban/UI/application.py (ThubanApplication.OnInit)
747            (ThubanApplication.CreateMainWindow): Put the mainwindow
748            instantiation into a separate method so that it can be overridden
749            by a subclass.
750    
751    2002-07-19  Bernhard Herzog  <[email protected]>
752    
753            * Thuban/Model/session.py: Issue a CHANGED message every time
754            another changed message is issued to make it easier to get
755            notified of changes.
756            (Session): Update the doc string
757            (Session.forward): Issue changed-events as CHANGED as well.
758            (Session.changed): Overwrite the inherited version to issue
759            CHANGED events as well.
760    
761            * Thuban/UI/tree.py: We can now simply subscribe to the session's
762            CHANGED channel to be informed of changes.
763            (SessionTreeCtrl.session_channels): Not needed any longer.
764            (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
765            Only have to (un)subscribe CHANGED
766    
767            * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
768    
769            * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
770            for the wxPython locale bug to __init__.py so that it's
771            automatically executed by anybody using UI code from Thuban.
772    
773    2002-07-18  Bernhard Herzog  <[email protected]>
774    
775            * Thuban/UI/main.py (main): app no longer needs to be global
776    
777            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
778            as parameter and store it in an instance variable
779            (MainWindow.invoke_command, MainWindow.update_command_ui)
780            (MainWindow.save_modified_session, MainWindow.NewSession)
781            (MainWindow.OpenSession, MainWindow.SaveSession)
782            (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
783            application object.
784    
785            * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
786            the main window with self.
787    
788            * Thuban/UI/context.py: New module with the context class
789    
790            * Thuban/UI/command.py (Command): Update doc string.
791    
792            * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
793            MainWindow.update_command_ui): Pass an instance of the context
794            class to the command's methods
795            (check_current_tool, call_method): Handle the new context
796            implementation
797    
798            * Examples/simple_extensions/simple_tool.py (simple_tool,
799            check_simple_tool): Handle the new context implementation
800    
801            * Examples/simple_extensions/simple_command.py (simple_command):
802            Handle the new context implementation. Update the comments about
803            the context.
804    
805            * Thuban/UI/application.py (ThubanApplication.SetSession): Add
806            doc-string
807            (ThubanApplication.Session): New method to return the session
808            object
809    
810            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
811            interactor's selected_layer may not be a layer of the current
812            session when the tree is updated while a new session is being set.
813    
814    2002-07-17  Bernhard Herzog  <[email protected]>
815    
816            * Thuban/UI/tree.py (color_string): Removed. No longer used.
817            (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
818            update_tree into update_tree and add_items. The tree now uses a
819            more generic way to display the contents of the tree.
820            (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
821    
822            * Thuban/Model/layer.py (Layer.TreeInfo),
823            Thuban/Model/extension.py (Extension.TreeInfo),
824            Thuban/Model/map.py (Map.TreeInfo),
825            Thuban/Model/session.py (Session.TreeInfo):
826            Add TreeInfo methods to implement the new tree view update scheme
827    
828    2002-07-16  Bernhard Herzog  <[email protected]>
829    
830            * Thuban/UI/application.py: Don't use "import from" for the
831            MainWindow. It can't always be resolved.
832            (ThubanApplication.OnInit): change reference to MainWindow
833            accordingly.
834    
835            * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
836            completely
837    
838    2002-07-10  Bernhard Herzog  <[email protected]>
839    
840            * setup.py (create_init_module): New configurable variable whose
841            default depends on the platform we're running on.
842            (ThubanInstall.initialize_options): Initialize
843            self.create_init_module from the global create_init_module
844            (ThubanInstall.user_options): indictate that the options
845            create-init-module and init-module-dir have arguments.
846    
847            * setup.py: In the setup call change the version number to include
848            cvs.
849    
850            * MANIFEST.in: Add the files in Examples
851    
852    2002-07-09  Bernhard Herzog  <[email protected]>
853    
854            * setup.py: In the setup call, use the thuban homepage as the
855            value of the url parameter.
856    
857            * Examples: New subdirectory for examples.
858    
859            * Examples/simple_extensions/simple_tool.xpm,
860            Examples/simple_extensions/simple_tool.py,
861            Examples/simple_extensions/simple_command.py,
862            Examples/simple_extensions/README: Simple examples showing how to
863            add new commands and tools.
864    
865            * setup.cfg (bdist_rpm): Add the default value for prefix and tell
866            bdist_rpm that we also have an install script.
867            (bdist_inno): Add 2002 to the copyright notice.
868    
869            * setup.py: Create a file in python's site-packages directory to
870            make installation of Thuban as a library easier.
871            (ThubanInstall.user_options): Add two new options,
872            create-init-module and init-module-dir
873            (ThubanInstall.expand_with_pure_python_dirs): New method to expand
874            filenames for installation in the default directories.
875            (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
876            the inherited methods to capture some filenames before they're
877            transformed too much by distutils.
878            (ThubanInstall.run): Create the init module if requested.
879            (ThubanInstall.thuban_init_filename): New method to return the
880            full name of the init module.
881            (ThubanInstall.get_outputs): Append the filename of the init
882            module.
883    
884  2002-07-08  Bernhard Herzog  <[email protected]>  2002-07-08  Bernhard Herzog  <[email protected]>
885    
886            * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
887            handle the prefix properly which means that the default for the
888            installation prefix should be /usr for RPMs and /usr/local when
889            doing a normal source install.
890            (bdist_rpm_install_script): Script to override the default install
891            commands in the specfile generated by the bdist_rpm command.
892            (thuban_bdist_rpm.user_options): Add a prefix option
893            (thuban_bdist_rpm.initialize_options): Init the prefix option.
894            Create the script files for the spec files as empty files here
895            (thuban_bdist_rpm._make_spec_file): Override the inherited method
896            to fill the script files with content.
897    
898          * Thuban/Model/save.py (relative_filename): Wrapper around          * Thuban/Model/save.py (relative_filename): Wrapper around
899          Thuban.Lib.fileutil.relative_filename that accepts an empty dir          Thuban.Lib.fileutil.relative_filename that accepts an empty dir
900          argument. save_session now automatically uses this version,          argument. save_session now automatically uses this version,
# Line 8  Line 903 
903          * setup.py: In the setup call, make sure that the library          * setup.py: In the setup call, make sure that the library
904          directories are under $prefix/lib not directly under $prefix.          directories are under $prefix/lib not directly under $prefix.
905    
906  2002-06-20      Jan-Oliver Wagner <[email protected]>  2002-06-20  Jan-Oliver Wagner <[email protected]>
907    
908          * Thuban/Model/extension.py: new module to handle extension objects.          * Thuban/Model/extension.py: new module to handle extension objects.
909          * Thuban/Model/messages.py: new messages for extensions.          * Thuban/Model/messages.py: new messages for extensions.
# Line 237  Line 1132 
1132          * Thuban/UI/messages.py (VIEW_POSITION): New message for the          * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1133          position in the statusbar          position in the statusbar
1134    
1135  2002-04-26      Frank Koormann <[email protected]>  2002-04-26  Frank Koormann <[email protected]>
1136    
1137          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1138    
1139  2002-04-24      Frank Koormann <[email protected]>  2002-04-24  Frank Koormann <[email protected]>
1140            
1141          * Resources/Bitmaps/identify.xpm: shadow added          * Resources/Bitmaps/identify.xpm: shadow added
1142    
1143          * Resources/Bitmaps/fullextent.xpm: new          * Resources/Bitmaps/fullextent.xpm: new
           
 2002-04-22      Jan-Oliver Wagner <[email protected]>  
1144    
1145          * Thuban/UI/tree.py (update_tree): added test for None on map bounding box  2002-04-22  Jan-Oliver Wagner <[email protected]>
1146    
1147  2002-04-21      Jan-Oliver Wagner <[email protected]>          * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1148            box
1149    
1150    2002-04-21  Jan-Oliver Wagner <[email protected]>
1151    
1152          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1153    
1154          * Thuban/UI/tree.py (update_tree): added added map extent          * Thuban/UI/tree.py (update_tree): added added map extent
1155    
1156          * Thuban/UI/mainwindow.py (_method_command): extended by parameter          * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1157          icon; added map_full_extend as tool          icon; added map_full_extend as tool
1158    
1159  2002-04-19      Jan-Oliver Wagner <[email protected]>  2002-04-19  Jan-Oliver Wagner <[email protected]>
1160    
1161          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1162          saving _new_ sessions          saving _new_ sessions
# Line 362  Line 1258 
1258    
1259          * setup.py: increase version number to 0.1          * setup.py: increase version number to 0.1
1260          (data_dist): New command class for data distribution          (data_dist): New command class for data distribution
           
1261    
1262  2001-09-14  Bernhard Herzog  <[email protected]>  2001-09-14  Bernhard Herzog  <[email protected]>
1263    
1264          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1265          Handle the case of no layer (i.e. layer is None) properly.          Handle the case of no layer (i.e. layer is None) properly.
1266    
1267          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1268          Set the initial selection of the combo boxes to reflect the          Set the initial selection of the combo boxes to reflect the
1269          projection we're starting with in a way that works on windows,          projection we're starting with in a way that works on windows,
1270          too.          too.
# Line 479  Line 1374 
1374          (MainWindow.identify_view_on_demand): Store the interactor in an          (MainWindow.identify_view_on_demand): Store the interactor in an
1375          instvar and use that reference instead of going through main.app          instvar and use that reference instead of going through main.app
1376    
1377          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1378          * Thuban/UI/application.py (ThubanApplication.OnInit):          * Thuban/UI/application.py (ThubanApplication.OnInit):
1379          * Thuban/UI/main.py (main): Create the session tree view in main          * Thuban/UI/main.py (main): Create the session tree view in main
1380          with the new mainwindow method ShowSessionTree and not directly          with the new mainwindow method ShowSessionTree and not directly
1381          the application's OnInit method          the application's OnInit method
# Line 496  Line 1391 
1391          layer to the tableview dialog.          layer to the tableview dialog.
1392    
1393          * Thuban/UI/tableview.py: Add some doc-strings          * Thuban/UI/tableview.py: Add some doc-strings
1394          (TableGrid):          (TableGrid):
1395          (TableGrid.OnRangeSelect):          (TableGrid.OnRangeSelect):
1396          (TableGrid.OnSelectCell):          (TableGrid.OnSelectCell):
1397          (TableFrame.__init__):          (TableFrame.__init__):
# Line 563  Line 1458 
1458  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
1459    
1460          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1461            
1462          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1463          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
1464            
1465          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1466          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
1467          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 613  Line 1508 
1508          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
1509          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
1510          link_file method          link_file method
1511            
1512          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1513          the window when the first layer is added to the map.          the window when the first layer is added to the map.
1514    
# Line 650  Line 1545 
1545          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
1546          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1547          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
1548            
1549          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
1550          installer          installer
1551    

Legend:
Removed from v.202  
changed lines
  Added in v.477

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26