/[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 44 by bh, Fri Sep 7 11:56:05 2001 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]>
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
899            Thuban.Lib.fileutil.relative_filename that accepts an empty dir
900            argument. save_session now automatically uses this version,
901            solving a problem when saving to a relative filename.
902    
903            * setup.py: In the setup call, make sure that the library
904            directories are under $prefix/lib not directly under $prefix.
905    
906    2002-06-20  Jan-Oliver Wagner <[email protected]>
907    
908            * Thuban/Model/extension.py: new module to handle extension objects.
909            * Thuban/Model/messages.py: new messages for extensions.
910            * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
911            Session.AddExtension): new for handling extensions.
912            Also some other minor changes to round up extension handling.
913            * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
914            of Extension titles and title and names of its objects.
915    
916    2002-05-29  Bernhard Herzog  <[email protected]>
917    
918            * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
919            the events for a command.
920            (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
921            Call bind_command_events to bind the events. add_toolbar_command
922            can now bind events too so that it's possible to have commands
923            that are only available through the toolbar.
924            (MainWindow.init_ids): New instance variable events_bound to keep
925            track of for which commands events have been bound.
926    
927    2002-05-28  Bernhard Herzog  <[email protected]>
928    
929            * Thuban/UI/menu.py: New module to build and manage menus.
930    
931            * Thuban/UI/mainwindow.py: Remove some unused imports.
932            (MainWindow.__init__, main_menu): move the definition of the main
933            menu from __init__ to the Menu instance main_menu.
934            (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
935            build the menu bar and sub-menus from a menu description.
936    
937            * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
938            startup file
939            (ThubanApplication.read_startup_files): New method to run
940            ~/.thuban/thubanstart.py
941    
942            * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
943            Move the toolbar definition to the Menu instance main_toolbar.
944            (MainWindow.build_toolbar): New method to build the toolbar
945            similar to the build_menu methods
946    
947    2002-05-23  Bernhard Herzog  <[email protected]>
948    
949            * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
950            layer_outline_color. Fix it in the definition of the command too.
951    
952            * Thuban/UI/command.py (Command): Fix typo in doc string
953    
954    2002-05-22  Bernhard Herzog  <[email protected]>
955    
956            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
957            in the docstring
958    
959    2002-05-15  Bernhard Herzog  <[email protected]>
960    
961            * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
962            when the shapefile is empty.
963            (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
964            now return None for empty shapefiles. Update doc-strings.
965    
966            * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
967            the layer's bbox being None.
968    
969            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
970            layer's bbox being None.
971    
972            * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
973            necessary.
974            (MapCanvas.__init__): New instance variables, last_selected_layer
975            and last_selected_shape to determine how the selection has
976            changed.
977    
978            * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
979            AutoSizeColumns because it will cause a traversal of the entire
980            table which for large .dbf files will take a very long time.
981    
982    2002-05-14  Bernhard Herzog  <[email protected]>
983    
984            * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
985            maximum depth for the tree than shapelib does by default.
986    
987    2002-05-10  Bernhard Herzog  <[email protected]>
988    
989            * setup.py (py_modules): The shptree modules doesn't have a
990            wrapper, so don't include it in the py_modules
991    
992    2002-05-08  Bernhard Herzog  <[email protected]>
993    
994            * extensions/shapelib/shptree.c (compare_ints): Make arguments
995            const void * as in the qsort prototype
996            (SHPTreeFindLikelyShapes): Remove some unused variables.
997    
998            * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
999            maintains to redraw the window during a drag.
1000            (MapCanvas.unprojected_rect_around_point): New method to determine
1001            a small region around a point for hit-testing.
1002            (MapCanvas.find_shape_at): Only test the shapes in a small region
1003            around the point.
1004    
1005            * setup.py: Increment the version to 0.1.2
1006    
1007            * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
1008            debug print and set session to None after unsubscribing
1009    
1010    2002-05-07  Bernhard Herzog  <[email protected]>
1011    
1012            * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
1013            the file to have a .thuban extension.
1014    
1015            * Thuban/UI/tree.py (session_channels): New class constant with
1016            all the session channels to subscribe to to update the tree
1017            (SessionTreeCtrl.session_changed): Remember the session so that we
1018            can unsubscribe properly. Use the new class constant to
1019            unsubscribe from the old session and subscribe to the new one.
1020            (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
1021            subscriptions of the SessionTreeCtrl.
1022            (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
1023    
1024            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
1025            Session Tree" command to the file menu.
1026    
1027            * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
1028            as update_region to the renderer.
1029    
1030            * Thuban/UI/renderer.py
1031            (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
1032            update box is now directly a tuple, not a wxRect anymore.
1033    
1034            * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
1035            prints.
1036    
1037    2002-05-07  Bernhard Herzog  <[email protected]>
1038    
1039            * setup.py: Add the shptree extension module. See
1040            extensions/pyshapelib/ChangeLog for more details.
1041    
1042            * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
1043            extensions/shapelib/dbfopen.c: Really update to the versions of
1044            shapelib 1.2.9. For some reason it wasn't really done on
1045            2002-04-11.
1046    
1047            * extensions/shapelib/shptree.c: Modified version of shptree.c of
1048            shapelib 1.2.9. The only real difference is the use of qsort
1049            instead of a bubble sort implementation
1050    
1051            * Thuban/Model/layer.py (Layer.__init__): New instance variable
1052            shapetree to hold the shapelib quadtree for the shapefile
1053            (Layer.open_shapefile): Create the quad tree.
1054            (Layer.ShapesInRegion): New method to return the ids of shapes in
1055            a given region using the quad tree.
1056    
1057            * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
1058            comment
1059            (draw_polygon_shape): Accept both arcs and polygons.
1060            (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
1061            the api.
1062    
1063            * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
1064            return the shape ids to be rendered in a given layer.
1065            (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
1066            ids. Use draw_polygon_shape to draw arc shapes as well.
1067            (ScreenRenderer.RenderMap): New parameter for the rectangle that
1068            has to be updated
1069            (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
1070            calling it's ShapesInRegion method.
1071    
1072            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
1073            update_region for the update region.
1074            (MapCanvas.OnPaint): Maintain the update region
1075            (MapCanvas.do_redraw): Pass the bounding box of the update_region
1076            to the renderer when drawing the bitmap. Reset the update_region.
1077    
1078    2002-05-03  Bernhard Herzog  <[email protected]>
1079    
1080            * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
1081            MainWindow.OpenSession): Change the file extension of the session
1082            files to .thuban
1083    
1084            * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
1085            Move the map channels to be forwarded by the session into the
1086            class constant with forwarded_channels. Also add
1087            LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
1088            forwarded_channels
1089    
1090            * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
1091            typo and some rewording).
1092    
1093    2002-05-02  Bernhard Herzog  <[email protected]>
1094    
1095            * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
1096            around to speed up most redraws:
1097            (MapCanvas.__init__): New instance variable bitmap which holds the
1098            bitmap
1099            (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
1100            self.bitmap to draw.
1101            (MapCanvas.full_redraw): New method to force a full redraw
1102            including the bitmap
1103            (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
1104            make sure the bitmap is redrawn.
1105            (MapCanvas.projection_changed, MapCanvas.set_view_transform,
1106            MapCanvas.shape_selected): Call full_redraw instead of readraw to
1107            make sure the bitmap is redrawn.
1108            (MapCanvas.OnSize): New method to handle size events so that the
1109            bitmap can be redrawn.
1110    
1111    2002-04-29  Bernhard Herzog  <[email protected]>
1112    
1113            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1114            canvas' VIEW_POSITION event
1115            (MainWindow.view_position_changed): Handler for VIEW_POSITION.
1116            Update the text in the status-bar accordingly.
1117    
1118            * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
1119            (MapCanvas.__del__): Implement because Publisher.__del__ has to be
1120            called.
1121            (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
1122            current_position
1123            (MapCanvas.set_current_position): New method to set
1124            current_position. Issue a VIEW_POSITION event
1125            (MapCanvas.CurrentPosition): New public method to return the value
1126            of current_position. Should be called when the VIEW_POSITION event
1127            is processed.
1128            (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
1129            Update the position.
1130            (MapCanvas.OnLeaveWindow): Set the position to None.
1131    
1132            * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1133            position in the statusbar
1134    
1135    2002-04-26  Frank Koormann <[email protected]>
1136    
1137            * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1138    
1139    2002-04-24  Frank Koormann <[email protected]>
1140    
1141            * Resources/Bitmaps/identify.xpm: shadow added
1142    
1143            * Resources/Bitmaps/fullextent.xpm: new
1144    
1145    2002-04-22  Jan-Oliver Wagner <[email protected]>
1146    
1147            * 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
1153    
1154            * Thuban/UI/tree.py (update_tree): added added map extent
1155    
1156            * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1157            icon; added map_full_extend as tool
1158    
1159    2002-04-19  Jan-Oliver Wagner <[email protected]>
1160    
1161            * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1162            saving _new_ sessions
1163    
1164            * Thuban/Model/session.py (create_empty_session): new session
1165            don't have a filename (set to None)
1166    
1167            * Thuban/UI/tree.py (update_tree): added filename and modified flag
1168    
1169            * Thuban/Model/load.py (ProcessSession): convert projection
1170            parameters from unicode to regular string
1171    
1172            * Data/iceland_sample.session: Added UTM Zone 26 projection.
1173    
1174    2002-04-11  Bernhard Herzog  <[email protected]>
1175    
1176            * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
1177            extensions/shapelib/dbfopen.c: Update to the versions of shapelib
1178            1.2.9
1179    
1180            * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
1181            the pyshapelib directoy into the list of include dirs, so that
1182            pyshapelib_api.h can be found.
1183    
1184            * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
1185            holds the pyshapelib C-API
1186            (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
1187            pyshapelib_api to access the shapelib functions.
1188            (initwxproj): Import the c_api from the shapelib module and
1189            initialize pyshapelib_api.
1190    
1191    2002-04-04  Bernhard Herzog  <[email protected]>
1192    
1193            * setup.py (thuban_bdist_rpm.initialize_options): Use
1194            initialize_options to create the scripts for the rpm.
1195    
1196            * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1197    
1198    2002-04-03  Bernhard Herzog  <[email protected]>
1199    
1200            * setup.py: Increment version to 0.1.1
1201    
1202            * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
1203            Layer" and "Remove Layer" commands from the layer menu to the map
1204            menu
1205    
1206    2002-02-15  Bernhard Herzog  <[email protected]>
1207    
1208            * Thuban/Model/layer.py (Layer.Shape): list append only takes one
1209            argument (python <= 1.5.2 erroneously accepted multiuple
1210            arguments)
1211    
1212    2002-02-04  Bernhard Herzog  <[email protected]>
1213    
1214            * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
1215            RecordGrid in the identifyview.
1216            (IdentifyView.__init__): Use IdentifyGridCtrl instead of
1217            IdentifyListCtrl. The grid allows editing of the values.
1218    
1219            * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
1220            implementing a grid for a single row of a thuban table.
1221    
1222            * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
1223            layers by default. Easier to use than the previous default of only
1224            searching through the select layer which meant that if no layer
1225            was selected, you couldn't select a shape.
1226    
1227            * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
1228    
1229            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
1230            stroke_width attribute
1231    
1232            * Thuban/Model/save.py (save_session): Write the new stroke_width
1233            attribute
1234    
1235            * Thuban/Model/load.py (ProcessSession.startElement): Read the
1236            stroke_width attribute
1237    
1238            * Thuban/Model/layer.py (Layer.__init__): New parameter and
1239            instance variable stroke_width
1240            (Layer.SetStrokeWidth): Set the stroke_width.
1241    
1242    2002-02-01  Bernhard Herzog  <[email protected]>
1243    
1244            * extensions/thuban/wxproj.cpp (project_points): Fix two
1245            off-by-one errors in the last loop that joins the various parts
1246            together.
1247    
1248    2002-01-14  Bernhard Herzog  <[email protected]>
1249    
1250            * setup.py (data_dist.make_distribution): Fix some typos
1251    
1252    2001-09-18  Bernhard Herzog  <[email protected]>
1253    
1254            * README: Slight tweaking in preparation for the 0.1 release
1255    
1256            * setup.cfg: Add section for sdist to create both tgz and zip
1257            archives
1258    
1259            * setup.py: increase version number to 0.1
1260            (data_dist): New command class for data distribution
1261    
1262    2001-09-14  Bernhard Herzog  <[email protected]>
1263    
1264            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1265            Handle the case of no layer (i.e. layer is None) properly.
1266    
1267            * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1268            Set the initial selection of the combo boxes to reflect the
1269            projection we're starting with in a way that works on windows,
1270            too.
1271    
1272            * Thuban/Lib/connector.py (Connector.print_connections): Print the
1273            puiblisher's ids in hex to make it easier to compare them to the
1274            standard repr of python methods
1275    
1276            * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
1277            messages
1278    
1279    2001-09-13  Bernhard Herzog  <[email protected]>
1280    
1281            * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1282            deselect the layer if no layer is selected
1283    
1284            * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
1285            idle time when there actually is something to draw. If there's
1286            nothing to draw simply clear the window
1287            (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
1288            (MapCanvas.SetMap): force a redraw in all cases because
1289            FitMapToWindow doesn't always do it.
1290            (MapCanvas.ZoomFactor): Add an optional parameter, center, to
1291            specify the point to move into the center of the window
1292            (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
1293            dragged, zoon in/out by a factor of 2
1294            (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
1295            index, i.e. reversed drawing order) so that objects appearing to
1296            be in from of others are selected first. This is probably mostly
1297            relevant for point shapes where the symbols used may overlap
1298    
1299            * Thuban/Model/session.py (create_empty_session): Unset the
1300            modified bit before returning it
1301    
1302            * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
1303            create_empty_session session to create the new, empty session.
1304    
1305            * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
1306            the tool bitmaps.
1307            (MainWindow.OnClose, MainWindow.save_modified_session): Separate
1308            the code that asks whether the session should be saved into the
1309            new method save_modified_session.
1310            (MainWindow.OpenSession, MainWindow.NewSession): Use the new
1311            method to save modified session here too.
1312    
1313    2001-09-11  Bernhard Herzog  <[email protected]>
1314    
1315            * setup.py (InnoIconItem): fix typo
1316    
1317            (thuban_bdist_inno.run):
1318            (bdist_inno.run): Move the decision not to create symlinks on
1319            non-nt platforms to thuban_bdist_inno and do it unconditinally
1320            since we never want to create the symlinks here
1321    
1322    2001-09-10  Bernhard Herzog  <[email protected]>
1323    
1324            * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
1325            identify view immediately
1326    
1327            * Thuban/UI/controls.py: New file with two classes RecordListCtrl
1328            and SelectableRecordListCtrl that implement the code shared by the
1329            identify view and the label dialog
1330    
1331            * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
1332            new class RecordListCtrl
1333    
1334            * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
1335            return value of GetValue is None instead of using it as a boolean
1336            directly so that Zero numbers are handled properly.
1337            (LabelListCtrl): Derive from the new class
1338            SelectableRecordListCtrl
1339    
1340            * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
1341            (Proj4Dialog.dialogLayout): Make the window resizable and set the
1342            size of the text control explicitly to make the sizers work on
1343            both Windows and X.
1344    
1345  2001-09-07  Bernhard Herzog  <[email protected]>  2001-09-07  Bernhard Herzog  <[email protected]>
1346    
1347          * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter          * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
1348          that can limit the search to the currently selected layer.          that can limit the search to the currently selected layer.
1349          (MapCanvas.SelectShapeAt): Make sure that the currently selected          (MapCanvas.SelectShapeAt): Make sure that the currently selected
1350          layer stays selected even when no shape is found          layer stays selected even when no shape is found
1351            (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1352            height do nothing (avoids zero division errors)
1353    
1354  2001-09-06  Bernhard Herzog  <[email protected]>  2001-09-06  Bernhard Herzog  <[email protected]>
1355    
# Line 28  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 45  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 112  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 162  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 199  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.44  
changed lines
  Added in v.477

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26