/[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 32 by bh, Thu Sep 6 13:32:55 2001 UTC revision 445 by jonathan, Thu Feb 27 16:03:17 2003 UTC
# Line 1  Line 1 
1    2003-02-27  Jonathan Coles   <[email protected]>
2    
3            * Thuban/common.py: Moved color conversion functions into
4            Thuban/UI/common.py.
5            (Str2Num): Now converts the float (not the string) to a long/int
6            so that an exception isn't thrown.
7    
8            * Thuban/UI/common.py: Common functions used in several UI modules
9    
10            * Thuban/Model/classification.py: Changed the class hierarchy
11            so that a Classification consists of Groups which return
12            Properties when a value matches a Group.
13    
14            * Thuban/Model/layer.py: Fixed name resolution problem.
15    
16            * Thuban/Model/load.py: Use new Classification and Group functions.
17    
18            * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
19            failure.
20            (Saver.write_classification): Use new Classification and Group
21            functions.
22    
23            * Thuban/UI/classifier.py: Changes to use new Classification and Group
24            functions. Fix to create a tuple with a single value instead of
25            simply returning the value.
26    
27            * Thuban/UI/renderer.py: Use new Classification and Group functions.
28            Use common.py functions.
29    
30            * Thuban/UI/tree.py: Use common.py functions.
31    
32    2003-02-24  Jonathan Coles   <[email protected]>
33    
34            * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
35            functions from Thuban color objects to wxWindow colour objects.
36    
37            * Thuban/Model/classification.py (Classification): Renamed
38            GetProperties() to GetClassData(). Used the new iterator
39            in TreeInfo().
40            (ClassIterator): Iterator implementation to iterate over the
41            ClassData objects in a classification object.
42    
43            * Thuban/Model/save.py (Saver.write_classificaton): Uses
44            the new iterator to save the classification information.
45    
46            * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
47            for changing the stroke and fill colors and previewing the
48            changes.
49    
50            * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
51            MainWindow.SaveSessionAs): Text string changes so the dialogs
52            have more meaningful titles.
53    
54            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
55            Classification method name from GetProperties to GetClassData.
56    
57            * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
58            instead of accessing now non-existent class variables.
59    
60    2003-02-24  Bernhard Herzog  <[email protected]>
61    
62            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
63            unneeded Shape() call. Rendering is substantially faster without
64            it and it avoids some problems with broken shape files.
65    
66    2003-02-20  Frank Koormann   <[email protected]>
67    
68            Force minimal size of identify and label dialogs. The autosizing
69            looked too ugly.
70    
71            * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
72            * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
73            Set size of listctrl.
74            * Thuban/UI/identifyview.py (IdentifyView.__init__):
75            Set size of dialog.
76    
77    2003-02-19  Jonathan Coles   <[email protected]>
78    
79            * test/test_classification.py, test/test_layer.py,
80            test/test_load.py, test/test_map.py, test/test_session.py:
81            Updated the tests to use the new functions that are in the
82            respective classes.
83    
84            * Thuban/Model/classification.py (Classification):
85            Uses the new ClassData* classes. Modification messages are
86            passed up to the parent layer (if it exists).
87            (ClassData): New class to encapsulate the common data in each
88            classification property.
89            (ClassDataDefault): Represents the Default class. data.
90            (ClassDataPoint): Represents a single class. data point
91            (ClassDataRange): Represents a class. range
92            (ClassDataMap): Represents a class. map (unused).
93    
94            * Thuban/Model/color.py: Added Color.None to represent something
95            with no color. Color.Black represents the color black.
96            (NoColor): Helper class derived from Color to represent something
97            with no color.
98    
99            * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
100            stroke_width attributes. Made the 'classification' attribute private.
101            New methods for setting/getting the classification.
102    
103            * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
104            to get the classifcation and use the new ClassData* classes to
105            hold the classification data. Use Str2Num to convert numbers
106            properly.
107    
108            * Thuban/Model/save.py (Saver): Use new Color and Classification
109            methods
110    
111            * Thuban/UI/classifier.py (ClassGrid): New class to represent a
112            custom grid.
113            (ClassTable): Support for editing Values and Labels and for
114            changing what type (point or range) of data is stored in each
115            property based on how the user enters the data.
116            (Classifier): Support for saving the new classifications and
117            launching the dialog to edit a property.
118            (SelectPropertiesDialog): New class for editing the visual
119            properties of a classification (stroke color, width, and fill color)
120            (ClassPreviewer): Took the Draw method from ClassRenderer and
121            made most of it into this new class. Intend to use this class in
122            the SelectPropertiesDialog for previewing changes.
123    
124            * Thuban/UI/renderer.py: Use new Color and Classification methods.
125    
126            * Thuban/UI/tree.py: Formatting changes.
127    
128            * Doc/thuban.dtd: Add 'label' element
129    
130            * Thuban/common.py: New. Contains common routines used throughout
131            the code.
132            (Str2Num): Takes a string and converts it to the "best" type of
133            number.
134    
135    2003-02-14  Bernhard Herzog  <[email protected]>
136    
137            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
138            dragging flag is always set to 0 even when the tool implementation
139            raises an exception
140    
141    2003-02-11  Bernhard Herzog  <[email protected]>
142    
143            * Thuban/UI/application.py (ThubanApplication.splash_screen): New
144            method to create a splash screen.
145            (ThubanApplication.ShowMainWindow): New. Show the main window.
146            Needed so the splash screen can display the mainwindow
147            (ThubanApplication.OnInit): Call the
148            new splash_screen method to determine whether the application
149            should display a splash screen. If it displays a splash screen do
150            not immediately show the main window.
151    
152    2003-02-11  Jonathan Coles  <[email protected]>
153    
154            * Thuban/Model/classification.py: Added import line to fix
155            feature conflicts between running on python2.2 and python2.1.
156    
157            * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
158            onto the clinfo parameter, so removed the deepcopy().
159    
160    2003-02-10  Jonathan Coles  <[email protected]>
161    
162            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
163            Added element_open variable to track opening and closing of tags
164            so that tags that don't span more than one line are closed with
165            /> instead of </tag_name>. Use the GetDefault*() methods of
166            the Classification class.
167    
168            * Thuban/Model/classification.py (Classificaton): Added set and
169            get methods for the default data. The class also takes a layer
170            reference so that modification messages can be sent. Fixed the
171            methods to use the new ClassData class.
172            (ClassData): New class to encapsulate the classification data
173    
174            * Thuban/Model/layer.py (Layer): Remove the
175            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
176            SetDefault*() methods on the layer's classification object.
177            (Layer.__init__): Use the new SetDefault*() methods in the
178            Classification class.
179    
180            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
181            object instead of a dictionary.
182    
183            * Thuban/UI/classifier.py (ClassRenderer): New class to
184            draw the classifications in the dialog box's table.
185            (Classifier): Modified to use the ClassRenderer class.
186    
187            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
188            methods of the Classification class.
189    
190            * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
191            of the ClassData class.
192    
193            * test/test_classification.py, test/test_layer.py,
194            test/test_map.py, test/test_session.py: Fix the tests to work
195            with the above code changes.
196    
197    2003-02-03  Jonathan Coles  <[email protected]>
198    
199            * Thuban/Model/classification.py (Classification): Added getNull()
200            to return the NullData reference
201    
202            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
203            Layer.SetStrokeWidth): Modified these functions to change the
204            null data in the classification rather than keep these values
205            directly in the Layer class. Menu options to change these values
206            work again.
207    
208    2003-01-28  Jonathan Coles  <[email protected]>
209    
210            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
211            Fixed crashing problem on some systems. Dialog box shows
212            classification data.
213    
214            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
215            Colors in the tree view.
216    
217            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
218            the tree info for classifications. Commented out unnecessary lines.
219    
220            * Thuban/Model/classification.py (Classification.TreeInfo): New
221            function to add information about the classification into the
222            tree view.
223    
224    2003-01-27  Jan-Oliver Wagner <[email protected]>
225    
226            * Thuban/__init__.py (_): New.
227    
228            * Thuban/Model/classification.py, Thuban/Model/extension.py,
229            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
230            Thuban/Model/session.py, Thuban/UI/application.py,
231            Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
232            Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
233            Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
234            Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
235            Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
236    
237    2003-01-27  Jonathan Coles  <[email protected]>
238    
239            * Thuban/Model/layer.py: Classification initialization calls.
240    
241            * Thuban/Model/classification.py: Created class to encapsulate
242            a layer classification. Supports specific data points and
243            ranges.
244    
245            * Thuban/Model/load.py: Added support for loading classification
246            information.
247    
248            * Thuban/Model/save.py: Added support for saving classification
249            information.
250    
251            * Thuban/UI/classifier.py: Initial class for a dialog box for
252            specifying classification information.
253    
254            * Thuban/UI/mainwindows.py: Support for opening the classifier
255            dialog.
256    
257            * Thuban/UI/renderer.py: Support for drawing a layer with the
258            classification information.
259    
260            * Data/iceland_sample_class.thuban: iceland_sample with
261            classification data.
262    
263            * test/test_classification: Tests for the Classification class.
264    
265    2002-12-09  Bernhard Herzog  <[email protected]>
266    
267            * test/test_command.py: New. Tests for the command classes.
268    
269            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
270            (Command.IsTool): New method to distinguish between command
271            switching tools and other commands.
272    
273            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
274            the tool to avoid direct assignments to instance variables
275            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
276            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
277            change the tool
278    
279            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
280            active tool's command turns insensitive, disable the tool.
281            (_tool_command): Use the new ToolCommand class
282    
283            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
284            SelectTool method to change the tool
285            (iconfile): Use the ToolCommand class
286    
287    2002-12-03  Bernhard Herzog  <[email protected]>
288    
289            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
290            the case of selected items that are not children of Layers or Maps
291            properly. Previously this bug would trigger an assertion in
292            wxWindows.
293    
294    2002-11-06  Frank Koormann  <[email protected]>
295    
296            * Thuban/UI/mainwindow.py: Altered the order of tools in the
297            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
298            Full Extent).
299    
300    2002-10-23  Bernhard Herzog  <[email protected]>
301    
302            * setup.py (setup call): version now 0.1.3
303    
304            * MANIFEST.in: Add the files in test/
305    
306            * test/README: Add note about tests requiring the iceland data
307    
308            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
309            copyright notice.
310    
311    2002-10-18  Bernhard Herzog  <[email protected]>
312    
313            * test/test_map.py
314            (TestMapWithContents.test_projected_bounding_box): Use an explicit
315            epsilon.
316    
317            * test/support.py (FloatComparisonMixin.assertFloatEqual)
318            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
319            message if the assertion fails and don't return the return value
320            of self.assert_. In assertFloatSeqEqual the return meant that not
321            all items of the sequence were compared.
322    
323    2002-09-20  Bernhard Herzog  <[email protected]>
324    
325            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
326    
327            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
328    
329            * test/test_map.py (TestMapWithContents.test_tree_info): Create
330            the string with the bounding box on the fly because of platform
331            differences in the way %g is handled.
332    
333            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
334            DBFfile too because Thuban layers can't yet cope missing DBF
335            files.
336    
337    2002-09-20  Bernhard Herzog  <[email protected]>
338    
339            * test/test_menu.py: Use initthuban instead of
340            add_thuban_dir_to_path to initialize Thuban.
341    
342            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
343            Mixin class for float comparisons
344            (SubscriberMixin): New. Mixin class to test messages sent through
345            the Connector class
346    
347            * test/README: Fix a typo and add the -v flag to the command for
348            individual tests
349    
350            * test/test_session.py: New. Test cases for Thuban.Model.session
351    
352            * test/test_proj.py: New. Test cases for Thuban.Model.proj
353    
354            * test/test_map.py: New. Test cases for Thuban.Model.map
355    
356            * test/test_layer.py: New. Test cases for Thuban.Model.layer
357    
358            * test/test_label.py: New. Test cases for Thuban.Model.label
359    
360            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
361    
362            * test/test_color.py: New. Test cases for Thuban.Model.color
363    
364            * test/test_base.py: New. Test cases for Thuban.Model.base
365    
366    2002-09-13  Bernhard Herzog  <[email protected]>
367    
368            * Thuban/Model/session.py (Session.forwarded_channels): Forward
369            the CHANGED channel too.
370    
371            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
372            CHANGED channel too.
373            (Map.__init__): Call the Modifiable constructor as well.
374    
375            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
376            event if the modified flag changes.
377            (Modifiable.changed): Tweak the doc-string.
378    
379            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
380            (MainWindow.set_position_text): Put the code that puts the text
381            with the mouse position into the status bar into the new method
382            set_position_text so that it can overwritten in derived classes.
383    
384    2002-09-12  Bernhard Herzog  <[email protected]>
385    
386            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
387            message box on the main window.
388    
389    2002-09-11  Bernhard Herzog  <[email protected]>
390    
391            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
392            the 'E' because it's less likely to interfere with other menu
393            entries.
394            (MainWindow.build_menu): remove an incorrect comment.
395    
396    2002-09-10  Bernhard Herzog  <[email protected]>
397    
398            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
399            (_tool_command): Add sensitive parameter
400            (_has_visible_map): Sensitivity callback to tools and other
401            commands that require a visible map. Use it in map_zoom_in_tool,
402            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
403            and map_full_extent
404    
405    2002-09-06  Bernhard Herzog  <[email protected]>
406    
407            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
408            VIEW_POSITION
409    
410    2002-09-04  Frank Koormann  <[email protected]>
411    
412            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
413    
414    2002-09-02  Bernhard Herzog  <[email protected]>
415    
416            * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
417            wxWindows already and our implementation doesn't work correctly
418            with wxGTK 2.3:
419            (MapCanvas.__init__): Remove the instance variable
420            (MapCanvas.OnPaint): Always call do_redraw when there's a map to
421            be drawin
422            (MapCanvas.OnIdle): Removed.
423    
424            * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
425            a parameter to determine the size of the rectangle.
426            (MapCanvas.find_shape_at): Create the box around the point on a
427            layer by layer basis and make the size depend on the shape type.
428            This solves a problem with the selection of point shapes at the
429            border of the layer's bounding box
430    
431    2002-08-30  Bernhard Herzog  <[email protected]>
432    
433            * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
434            for the sensitivity  of remove layer.
435            (_can_remove_layer): New. Sensitivity callback for remove layer
436            (Command layer_remove): Use _can_remove_layer
437    
438            * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
439            determine whether a given layer can be deleted.
440    
441            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
442            (MapCanvas.do_redraw): Get rid of the unused update_region
443            instance variable
444    
445            * Thuban/UI/view.py: Add/update some doc-strings.
446    
447            * test/: new subdirectory with a bunch of unit tests.
448    
449            * test/README, test/test_table.py, test/test_save.py,
450            test/test_menu.py, test/test_load.py: Initial set of tests and
451            brief instructions on how to run them
452    
453    2002-08-29  Bernhard Herzog  <[email protected]>
454    
455            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
456            arcs with multiple parts.
457    
458            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
459            Handle degenrate rectangles.
460    
461            * Thuban/Model/table.py: Make writing records work correctly:
462            (Table.__init__): Keep track of whether the DBF is open for
463            writing
464            (Table.write_record): Open the DBF file for writing when necessary
465    
466    2002-08-27  Bernhard Herzog  <[email protected]>
467    
468            * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
469            dbf files only for reading by default. Use a new writable dbf
470            object for writing.
471    
472    2002-08-26  Bernhard Herzog  <[email protected]>
473    
474            * Thuban/UI/mainwindow.py: Refactor the context creation:
475            (MainWindow.Context): New method to return a context
476            (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
477            new method
478    
479            * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
480            layer table specific code from TableGrid into LayerTableGrid
481            (TableFrame, LayerTableFrame): Split the layer table specific code
482            from TableFrame into LayerTableFrame
483            (LayerTableGrid.select_shape): Remove a debug print
484    
485            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
486            LayerTableFrame
487    
488    2002-08-23  Bernhard Herzog  <[email protected]>
489    
490            * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
491            absolute filename.
492    
493    2002-08-22  Bernhard Herzog  <[email protected]>
494    
495            * Thuban/Model/table.py (Table.write_record): New method to write
496            records.
497            (Table.__init__): Open the DBF file for writing too.
498    
499            * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
500            into the underlying table.
501    
502            * extensions/shapelib/shapefil.h (DBFCommit),
503            extensions/shapelib/dbfopen.c (DBFCommit): New API function to
504            commit any changes made to the DBF file.
505    
506            * Thuban/UI/mainwindow.py (make_check_current_tool)
507            (_tool_command): Put the code that generates the "checked"
508            callback into a separate function so that we can reuse it
509            elsewhere
510    
511            * Thuban/Model/save.py (Saver): New class to handle serializing a
512            session into an XML file. The main reason to introduce a class is
513            that applications built on Thuban can derive from it so that they
514            can save additional information in a session file.
515            (save_session): Delegate almost all the work to the Saver class.
516            Rename the filename argument to file because it may be a file like
517            object now.
518    
519            * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
520            code. Remove the little test code which would be executed when the
521            module is run as a script which didn't work anymore since it can't
522            import the other Thuban modules.
523            (ProcessSession, load_session): Refactor the ProcessSession to
524            have one method for each element start and end tag so that derived
525            classes can easily override the processing of individual tags.
526            Also, always parse with namespaces enabled because applications
527            built on top of Thuban will likely use namespaces if they extend
528            the session file format.
529    
530    2002-08-21  Bernhard Herzog  <[email protected]>
531    
532            * setup.py (ThubanInstall.run): Don't repr install_lib_orig
533            because thubaninit_contents will do it for us.
534    
535    2002-08-16  Jan-Oliver Wagner <[email protected]>
536    
537            * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
538            tree window already open
539    
540    2002-08-15  Bernhard Herzog  <[email protected]>
541    
542            * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
543            with self.
544    
545            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
546            when we have actually captured it.
547    
548            * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
549            shapefile and destroy the table.
550    
551            * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
552    
553    2002-08-14  Bernhard Herzog  <[email protected]>
554    
555            * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
556            instance variable columns
557            (RecordTable.GetTypeName): row and col may be negative in some
558            cases.
559    
560            * setup.py (InstallLocal.initialize_options)
561            (InstallLocal.finalize_options, InstallLocal.user_options): New
562            option create-init-file to build a thubaninit.py when running
563            install_local
564            (InstallLocal.run): Create the thubaninit.py module when requested
565            (thubaninit_contents): Split the template into several parts and
566            create a new function thubaninit_contents that creates the
567            contents of a thubaninit module.
568            (ThubanInstall.run): Use the new function to create the thubaninit
569            module.
570    
571    2002-07-30  Bernhard Herzog  <[email protected]>
572    
573            * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
574            cleanup.
575            (ThubanApplication.MainLoop): Extend to automatically call OnExit.
576    
577            * Thuban/Model/session.py (Session.Destroy): Don't bypass the
578            direct base class' Destroy method.
579    
580            * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
581            layers.
582            (Map.Destroy): Destroy the label_layer as well and call the
583            inherited Desatroymethod first so that no more messages are
584            issued.
585            (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
586            message if the stacking order actually has changed. Add
587            doc-strings.
588            (Map.BoundingBox): Correct the doc-string.
589            (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
590            (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
591    
592            * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
593            all labels.
594    
595    2002-07-29  Bernhard Herzog  <[email protected]>
596    
597            * Thuban/Model/map.py (Map.subscribe_layer_channels)
598            (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
599            to a layer's channels into separate methods.
600            (Map.RemoveLayer, Map.AddLayer): Call the new methods
601            (Map.Destroy): Unsubscribe from a layer's channels before
602            destroying it.
603    
604            * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
605            selected_layer parameter to searched_layer which is the layer to
606            search in.
607            (MapCanvas.SelectShapeAt): New parameter layer to restrict the
608            search to that layer. Return the selected layer and shape.
609    
610            * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
611            typo
612    
613    2002-07-24  Bernhard Herzog  <[email protected]>
614    
615            * Thuban/UI/application.py (ThubanApplication.create_session):
616            Extend the doc string.
617            (ThubanApplication.subscribe_session)
618            (ThubanApplication.unsubscribe_session): New methods to
619            subscribe/unsubscribe to/from session channels.
620            (ThubanApplication.SetSession): Call the new methods here.
621            (ThubanApplication.maps_changed, ThubanApplication.set_map):
622            Renamed set_map to maps_changed. Its now a subscriber for
623            MAPS_CHANGED.
624    
625            * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
626            x-coordinate in case of simple clicks
627    
628            * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
629            don't pass it as a parameter
630    
631            * Thuban/Model/session.py (Session.RemoveMap): New
632    
633            * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
634            window size into a parameter.
635    
636    2002-07-23  Bernhard Herzog  <[email protected]>
637    
638            * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
639            just commands.
640    
641            * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
642            parameter list a bit to allow setting the window title and the
643            initial message in the status bar. Update the callers.
644    
645            * Thuban/UI/application.py (ThubanApplication.OnInit)
646            (ThubanApplication.CreateMainWindow): Put the mainwindow
647            instantiation into a separate method so that it can be overridden
648            by a subclass.
649    
650    2002-07-19  Bernhard Herzog  <[email protected]>
651    
652            * Thuban/Model/session.py: Issue a CHANGED message every time
653            another changed message is issued to make it easier to get
654            notified of changes.
655            (Session): Update the doc string
656            (Session.forward): Issue changed-events as CHANGED as well.
657            (Session.changed): Overwrite the inherited version to issue
658            CHANGED events as well.
659    
660            * Thuban/UI/tree.py: We can now simply subscribe to the session's
661            CHANGED channel to be informed of changes.
662            (SessionTreeCtrl.session_channels): Not needed any longer.
663            (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
664            Only have to (un)subscribe CHANGED
665    
666            * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
667    
668            * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
669            for the wxPython locale bug to __init__.py so that it's
670            automatically executed by anybody using UI code from Thuban.
671    
672    2002-07-18  Bernhard Herzog  <[email protected]>
673    
674            * Thuban/UI/main.py (main): app no longer needs to be global
675    
676            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
677            as parameter and store it in an instance variable
678            (MainWindow.invoke_command, MainWindow.update_command_ui)
679            (MainWindow.save_modified_session, MainWindow.NewSession)
680            (MainWindow.OpenSession, MainWindow.SaveSession)
681            (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
682            application object.
683    
684            * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
685            the main window with self.
686    
687            * Thuban/UI/context.py: New module with the context class
688    
689            * Thuban/UI/command.py (Command): Update doc string.
690    
691            * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
692            MainWindow.update_command_ui): Pass an instance of the context
693            class to the command's methods
694            (check_current_tool, call_method): Handle the new context
695            implementation
696    
697            * Examples/simple_extensions/simple_tool.py (simple_tool,
698            check_simple_tool): Handle the new context implementation
699    
700            * Examples/simple_extensions/simple_command.py (simple_command):
701            Handle the new context implementation. Update the comments about
702            the context.
703    
704            * Thuban/UI/application.py (ThubanApplication.SetSession): Add
705            doc-string
706            (ThubanApplication.Session): New method to return the session
707            object
708    
709            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
710            interactor's selected_layer may not be a layer of the current
711            session when the tree is updated while a new session is being set.
712    
713    2002-07-17  Bernhard Herzog  <[email protected]>
714    
715            * Thuban/UI/tree.py (color_string): Removed. No longer used.
716            (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
717            update_tree into update_tree and add_items. The tree now uses a
718            more generic way to display the contents of the tree.
719            (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
720    
721            * Thuban/Model/layer.py (Layer.TreeInfo),
722            Thuban/Model/extension.py (Extension.TreeInfo),
723            Thuban/Model/map.py (Map.TreeInfo),
724            Thuban/Model/session.py (Session.TreeInfo):
725            Add TreeInfo methods to implement the new tree view update scheme
726    
727    2002-07-16  Bernhard Herzog  <[email protected]>
728    
729            * Thuban/UI/application.py: Don't use "import from" for the
730            MainWindow. It can't always be resolved.
731            (ThubanApplication.OnInit): change reference to MainWindow
732            accordingly.
733    
734            * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
735            completely
736    
737    2002-07-10  Bernhard Herzog  <[email protected]>
738    
739            * setup.py (create_init_module): New configurable variable whose
740            default depends on the platform we're running on.
741            (ThubanInstall.initialize_options): Initialize
742            self.create_init_module from the global create_init_module
743            (ThubanInstall.user_options): indictate that the options
744            create-init-module and init-module-dir have arguments.
745    
746            * setup.py: In the setup call change the version number to include
747            cvs.
748    
749            * MANIFEST.in: Add the files in Examples
750    
751    2002-07-09  Bernhard Herzog  <[email protected]>
752    
753            * setup.py: In the setup call, use the thuban homepage as the
754            value of the url parameter.
755    
756            * Examples: New subdirectory for examples.
757    
758            * Examples/simple_extensions/simple_tool.xpm,
759            Examples/simple_extensions/simple_tool.py,
760            Examples/simple_extensions/simple_command.py,
761            Examples/simple_extensions/README: Simple examples showing how to
762            add new commands and tools.
763    
764            * setup.cfg (bdist_rpm): Add the default value for prefix and tell
765            bdist_rpm that we also have an install script.
766            (bdist_inno): Add 2002 to the copyright notice.
767    
768            * setup.py: Create a file in python's site-packages directory to
769            make installation of Thuban as a library easier.
770            (ThubanInstall.user_options): Add two new options,
771            create-init-module and init-module-dir
772            (ThubanInstall.expand_with_pure_python_dirs): New method to expand
773            filenames for installation in the default directories.
774            (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
775            the inherited methods to capture some filenames before they're
776            transformed too much by distutils.
777            (ThubanInstall.run): Create the init module if requested.
778            (ThubanInstall.thuban_init_filename): New method to return the
779            full name of the init module.
780            (ThubanInstall.get_outputs): Append the filename of the init
781            module.
782    
783    2002-07-08  Bernhard Herzog  <[email protected]>
784    
785            * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
786            handle the prefix properly which means that the default for the
787            installation prefix should be /usr for RPMs and /usr/local when
788            doing a normal source install.
789            (bdist_rpm_install_script): Script to override the default install
790            commands in the specfile generated by the bdist_rpm command.
791            (thuban_bdist_rpm.user_options): Add a prefix option
792            (thuban_bdist_rpm.initialize_options): Init the prefix option.
793            Create the script files for the spec files as empty files here
794            (thuban_bdist_rpm._make_spec_file): Override the inherited method
795            to fill the script files with content.
796    
797            * Thuban/Model/save.py (relative_filename): Wrapper around
798            Thuban.Lib.fileutil.relative_filename that accepts an empty dir
799            argument. save_session now automatically uses this version,
800            solving a problem when saving to a relative filename.
801    
802            * setup.py: In the setup call, make sure that the library
803            directories are under $prefix/lib not directly under $prefix.
804    
805    2002-06-20  Jan-Oliver Wagner <[email protected]>
806    
807            * Thuban/Model/extension.py: new module to handle extension objects.
808            * Thuban/Model/messages.py: new messages for extensions.
809            * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
810            Session.AddExtension): new for handling extensions.
811            Also some other minor changes to round up extension handling.
812            * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
813            of Extension titles and title and names of its objects.
814    
815    2002-05-29  Bernhard Herzog  <[email protected]>
816    
817            * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
818            the events for a command.
819            (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
820            Call bind_command_events to bind the events. add_toolbar_command
821            can now bind events too so that it's possible to have commands
822            that are only available through the toolbar.
823            (MainWindow.init_ids): New instance variable events_bound to keep
824            track of for which commands events have been bound.
825    
826    2002-05-28  Bernhard Herzog  <[email protected]>
827    
828            * Thuban/UI/menu.py: New module to build and manage menus.
829    
830            * Thuban/UI/mainwindow.py: Remove some unused imports.
831            (MainWindow.__init__, main_menu): move the definition of the main
832            menu from __init__ to the Menu instance main_menu.
833            (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
834            build the menu bar and sub-menus from a menu description.
835    
836            * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
837            startup file
838            (ThubanApplication.read_startup_files): New method to run
839            ~/.thuban/thubanstart.py
840    
841            * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
842            Move the toolbar definition to the Menu instance main_toolbar.
843            (MainWindow.build_toolbar): New method to build the toolbar
844            similar to the build_menu methods
845    
846    2002-05-23  Bernhard Herzog  <[email protected]>
847    
848            * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
849            layer_outline_color. Fix it in the definition of the command too.
850    
851            * Thuban/UI/command.py (Command): Fix typo in doc string
852    
853    2002-05-22  Bernhard Herzog  <[email protected]>
854    
855            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
856            in the docstring
857    
858    2002-05-15  Bernhard Herzog  <[email protected]>
859    
860            * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
861            when the shapefile is empty.
862            (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
863            now return None for empty shapefiles. Update doc-strings.
864    
865            * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
866            the layer's bbox being None.
867    
868            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
869            layer's bbox being None.
870    
871            * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
872            necessary.
873            (MapCanvas.__init__): New instance variables, last_selected_layer
874            and last_selected_shape to determine how the selection has
875            changed.
876    
877            * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
878            AutoSizeColumns because it will cause a traversal of the entire
879            table which for large .dbf files will take a very long time.
880    
881    2002-05-14  Bernhard Herzog  <[email protected]>
882    
883            * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
884            maximum depth for the tree than shapelib does by default.
885    
886    2002-05-10  Bernhard Herzog  <[email protected]>
887    
888            * setup.py (py_modules): The shptree modules doesn't have a
889            wrapper, so don't include it in the py_modules
890    
891    2002-05-08  Bernhard Herzog  <[email protected]>
892    
893            * extensions/shapelib/shptree.c (compare_ints): Make arguments
894            const void * as in the qsort prototype
895            (SHPTreeFindLikelyShapes): Remove some unused variables.
896    
897            * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
898            maintains to redraw the window during a drag.
899            (MapCanvas.unprojected_rect_around_point): New method to determine
900            a small region around a point for hit-testing.
901            (MapCanvas.find_shape_at): Only test the shapes in a small region
902            around the point.
903    
904            * setup.py: Increment the version to 0.1.2
905    
906            * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
907            debug print and set session to None after unsubscribing
908    
909    2002-05-07  Bernhard Herzog  <[email protected]>
910    
911            * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
912            the file to have a .thuban extension.
913    
914            * Thuban/UI/tree.py (session_channels): New class constant with
915            all the session channels to subscribe to to update the tree
916            (SessionTreeCtrl.session_changed): Remember the session so that we
917            can unsubscribe properly. Use the new class constant to
918            unsubscribe from the old session and subscribe to the new one.
919            (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
920            subscriptions of the SessionTreeCtrl.
921            (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
922    
923            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
924            Session Tree" command to the file menu.
925    
926            * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
927            as update_region to the renderer.
928    
929            * Thuban/UI/renderer.py
930            (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
931            update box is now directly a tuple, not a wxRect anymore.
932    
933            * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
934            prints.
935    
936    2002-05-07  Bernhard Herzog  <[email protected]>
937    
938            * setup.py: Add the shptree extension module. See
939            extensions/pyshapelib/ChangeLog for more details.
940    
941            * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
942            extensions/shapelib/dbfopen.c: Really update to the versions of
943            shapelib 1.2.9. For some reason it wasn't really done on
944            2002-04-11.
945    
946            * extensions/shapelib/shptree.c: Modified version of shptree.c of
947            shapelib 1.2.9. The only real difference is the use of qsort
948            instead of a bubble sort implementation
949    
950            * Thuban/Model/layer.py (Layer.__init__): New instance variable
951            shapetree to hold the shapelib quadtree for the shapefile
952            (Layer.open_shapefile): Create the quad tree.
953            (Layer.ShapesInRegion): New method to return the ids of shapes in
954            a given region using the quad tree.
955    
956            * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
957            comment
958            (draw_polygon_shape): Accept both arcs and polygons.
959            (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
960            the api.
961    
962            * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
963            return the shape ids to be rendered in a given layer.
964            (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
965            ids. Use draw_polygon_shape to draw arc shapes as well.
966            (ScreenRenderer.RenderMap): New parameter for the rectangle that
967            has to be updated
968            (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
969            calling it's ShapesInRegion method.
970    
971            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
972            update_region for the update region.
973            (MapCanvas.OnPaint): Maintain the update region
974            (MapCanvas.do_redraw): Pass the bounding box of the update_region
975            to the renderer when drawing the bitmap. Reset the update_region.
976    
977    2002-05-03  Bernhard Herzog  <[email protected]>
978    
979            * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
980            MainWindow.OpenSession): Change the file extension of the session
981            files to .thuban
982    
983            * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
984            Move the map channels to be forwarded by the session into the
985            class constant with forwarded_channels. Also add
986            LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
987            forwarded_channels
988    
989            * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
990            typo and some rewording).
991    
992    2002-05-02  Bernhard Herzog  <[email protected]>
993    
994            * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
995            around to speed up most redraws:
996            (MapCanvas.__init__): New instance variable bitmap which holds the
997            bitmap
998            (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
999            self.bitmap to draw.
1000            (MapCanvas.full_redraw): New method to force a full redraw
1001            including the bitmap
1002            (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
1003            make sure the bitmap is redrawn.
1004            (MapCanvas.projection_changed, MapCanvas.set_view_transform,
1005            MapCanvas.shape_selected): Call full_redraw instead of readraw to
1006            make sure the bitmap is redrawn.
1007            (MapCanvas.OnSize): New method to handle size events so that the
1008            bitmap can be redrawn.
1009    
1010    2002-04-29  Bernhard Herzog  <[email protected]>
1011    
1012            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1013            canvas' VIEW_POSITION event
1014            (MainWindow.view_position_changed): Handler for VIEW_POSITION.
1015            Update the text in the status-bar accordingly.
1016    
1017            * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
1018            (MapCanvas.__del__): Implement because Publisher.__del__ has to be
1019            called.
1020            (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
1021            current_position
1022            (MapCanvas.set_current_position): New method to set
1023            current_position. Issue a VIEW_POSITION event
1024            (MapCanvas.CurrentPosition): New public method to return the value
1025            of current_position. Should be called when the VIEW_POSITION event
1026            is processed.
1027            (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
1028            Update the position.
1029            (MapCanvas.OnLeaveWindow): Set the position to None.
1030    
1031            * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1032            position in the statusbar
1033    
1034    2002-04-26  Frank Koormann <[email protected]>
1035    
1036            * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1037    
1038    2002-04-24  Frank Koormann <[email protected]>
1039    
1040            * Resources/Bitmaps/identify.xpm: shadow added
1041    
1042            * Resources/Bitmaps/fullextent.xpm: new
1043    
1044    2002-04-22  Jan-Oliver Wagner <[email protected]>
1045    
1046            * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1047            box
1048    
1049    2002-04-21  Jan-Oliver Wagner <[email protected]>
1050    
1051            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1052    
1053            * Thuban/UI/tree.py (update_tree): added added map extent
1054    
1055            * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1056            icon; added map_full_extend as tool
1057    
1058    2002-04-19  Jan-Oliver Wagner <[email protected]>
1059    
1060            * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1061            saving _new_ sessions
1062    
1063            * Thuban/Model/session.py (create_empty_session): new session
1064            don't have a filename (set to None)
1065    
1066            * Thuban/UI/tree.py (update_tree): added filename and modified flag
1067    
1068            * Thuban/Model/load.py (ProcessSession): convert projection
1069            parameters from unicode to regular string
1070    
1071            * Data/iceland_sample.session: Added UTM Zone 26 projection.
1072    
1073    2002-04-11  Bernhard Herzog  <[email protected]>
1074    
1075            * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
1076            extensions/shapelib/dbfopen.c: Update to the versions of shapelib
1077            1.2.9
1078    
1079            * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
1080            the pyshapelib directoy into the list of include dirs, so that
1081            pyshapelib_api.h can be found.
1082    
1083            * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
1084            holds the pyshapelib C-API
1085            (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
1086            pyshapelib_api to access the shapelib functions.
1087            (initwxproj): Import the c_api from the shapelib module and
1088            initialize pyshapelib_api.
1089    
1090    2002-04-04  Bernhard Herzog  <[email protected]>
1091    
1092            * setup.py (thuban_bdist_rpm.initialize_options): Use
1093            initialize_options to create the scripts for the rpm.
1094    
1095            * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1096    
1097    2002-04-03  Bernhard Herzog  <[email protected]>
1098    
1099            * setup.py: Increment version to 0.1.1
1100    
1101            * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
1102            Layer" and "Remove Layer" commands from the layer menu to the map
1103            menu
1104    
1105    2002-02-15  Bernhard Herzog  <[email protected]>
1106    
1107            * Thuban/Model/layer.py (Layer.Shape): list append only takes one
1108            argument (python <= 1.5.2 erroneously accepted multiuple
1109            arguments)
1110    
1111    2002-02-04  Bernhard Herzog  <[email protected]>
1112    
1113            * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
1114            RecordGrid in the identifyview.
1115            (IdentifyView.__init__): Use IdentifyGridCtrl instead of
1116            IdentifyListCtrl. The grid allows editing of the values.
1117    
1118            * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
1119            implementing a grid for a single row of a thuban table.
1120    
1121            * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
1122            layers by default. Easier to use than the previous default of only
1123            searching through the select layer which meant that if no layer
1124            was selected, you couldn't select a shape.
1125    
1126            * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
1127    
1128            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
1129            stroke_width attribute
1130    
1131            * Thuban/Model/save.py (save_session): Write the new stroke_width
1132            attribute
1133    
1134            * Thuban/Model/load.py (ProcessSession.startElement): Read the
1135            stroke_width attribute
1136    
1137            * Thuban/Model/layer.py (Layer.__init__): New parameter and
1138            instance variable stroke_width
1139            (Layer.SetStrokeWidth): Set the stroke_width.
1140    
1141    2002-02-01  Bernhard Herzog  <[email protected]>
1142    
1143            * extensions/thuban/wxproj.cpp (project_points): Fix two
1144            off-by-one errors in the last loop that joins the various parts
1145            together.
1146    
1147    2002-01-14  Bernhard Herzog  <[email protected]>
1148    
1149            * setup.py (data_dist.make_distribution): Fix some typos
1150    
1151    2001-09-18  Bernhard Herzog  <[email protected]>
1152    
1153            * README: Slight tweaking in preparation for the 0.1 release
1154    
1155            * setup.cfg: Add section for sdist to create both tgz and zip
1156            archives
1157    
1158            * setup.py: increase version number to 0.1
1159            (data_dist): New command class for data distribution
1160    
1161    2001-09-14  Bernhard Herzog  <[email protected]>
1162    
1163            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1164            Handle the case of no layer (i.e. layer is None) properly.
1165    
1166            * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1167            Set the initial selection of the combo boxes to reflect the
1168            projection we're starting with in a way that works on windows,
1169            too.
1170    
1171            * Thuban/Lib/connector.py (Connector.print_connections): Print the
1172            puiblisher's ids in hex to make it easier to compare them to the
1173            standard repr of python methods
1174    
1175            * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
1176            messages
1177    
1178    2001-09-13  Bernhard Herzog  <[email protected]>
1179    
1180            * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1181            deselect the layer if no layer is selected
1182    
1183            * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
1184            idle time when there actually is something to draw. If there's
1185            nothing to draw simply clear the window
1186            (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
1187            (MapCanvas.SetMap): force a redraw in all cases because
1188            FitMapToWindow doesn't always do it.
1189            (MapCanvas.ZoomFactor): Add an optional parameter, center, to
1190            specify the point to move into the center of the window
1191            (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
1192            dragged, zoon in/out by a factor of 2
1193            (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
1194            index, i.e. reversed drawing order) so that objects appearing to
1195            be in from of others are selected first. This is probably mostly
1196            relevant for point shapes where the symbols used may overlap
1197    
1198            * Thuban/Model/session.py (create_empty_session): Unset the
1199            modified bit before returning it
1200    
1201            * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
1202            create_empty_session session to create the new, empty session.
1203    
1204            * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
1205            the tool bitmaps.
1206            (MainWindow.OnClose, MainWindow.save_modified_session): Separate
1207            the code that asks whether the session should be saved into the
1208            new method save_modified_session.
1209            (MainWindow.OpenSession, MainWindow.NewSession): Use the new
1210            method to save modified session here too.
1211    
1212    2001-09-11  Bernhard Herzog  <[email protected]>
1213    
1214            * setup.py (InnoIconItem): fix typo
1215    
1216            (thuban_bdist_inno.run):
1217            (bdist_inno.run): Move the decision not to create symlinks on
1218            non-nt platforms to thuban_bdist_inno and do it unconditinally
1219            since we never want to create the symlinks here
1220    
1221    2001-09-10  Bernhard Herzog  <[email protected]>
1222    
1223            * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
1224            identify view immediately
1225    
1226            * Thuban/UI/controls.py: New file with two classes RecordListCtrl
1227            and SelectableRecordListCtrl that implement the code shared by the
1228            identify view and the label dialog
1229    
1230            * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
1231            new class RecordListCtrl
1232    
1233            * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
1234            return value of GetValue is None instead of using it as a boolean
1235            directly so that Zero numbers are handled properly.
1236            (LabelListCtrl): Derive from the new class
1237            SelectableRecordListCtrl
1238    
1239            * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
1240            (Proj4Dialog.dialogLayout): Make the window resizable and set the
1241            size of the text control explicitly to make the sizers work on
1242            both Windows and X.
1243    
1244    2001-09-07  Bernhard Herzog  <[email protected]>
1245    
1246            * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
1247            that can limit the search to the currently selected layer.
1248            (MapCanvas.SelectShapeAt): Make sure that the currently selected
1249            layer stays selected even when no shape is found
1250            (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1251            height do nothing (avoids zero division errors)
1252    
1253  2001-09-06  Bernhard Herzog  <[email protected]>  2001-09-06  Bernhard Herzog  <[email protected]>
1254    
1255            * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
1256            Correct the spelling of SessionTreeCtrl. dabbrev is too damn
1257            convenient :-)
1258            (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
1259            a new instvar layer_to_item to map layers to tree items
1260            (SessionTreeCtrl.layer_selected): Select the appropriate tree item
1261            to match the current selection in the interactor
1262    
1263            * Thuban/UI/interactor.py (Interactor.SelectedLayer):
1264            (Interactor.HasSelectedLayer): New methods to query the current
1265            selection
1266    
1267            * Thuban/UI/mainwindow.py (MainWindow.current_layer):
1268            (MainWindow.has_selected_layer): Simply call the appropriate
1269            interactor method
1270    
1271            * Thuban/UI/mainwindow.py (MainWindow.__init__):
1272            (MainWindow.LayerShowTable):
1273            (MainWindow.identify_view_on_demand): Store the interactor in an
1274            instvar and use that reference instead of going through main.app
1275    
1276            * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1277            * Thuban/UI/application.py (ThubanApplication.OnInit):
1278            * Thuban/UI/main.py (main): Create the session tree view in main
1279            with the new mainwindow method ShowSessionTree and not directly
1280            the application's OnInit method
1281    
1282            * Thuban/UI/tree.py (myTreeCtrlPanel):
1283            (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
1284            TreeCtrl isntead of a panel. This affects most method since we now
1285            refer to self instead of self.tree
1286            (SessionTreeView): New class implementing a non-modal dialog
1287            showing the session tree.
1288    
1289            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
1290            layer to the tableview dialog.
1291    
1292            * Thuban/UI/tableview.py: Add some doc-strings
1293            (TableGrid):
1294            (TableGrid.OnRangeSelect):
1295            (TableGrid.OnSelectCell):
1296            (TableFrame.__init__):
1297            (TableFrame.row_selected):
1298            Selecting rows in the grid view now updates the selected shapes
1299            through the TableFrame. To achieve this we derive TableGrid from
1300            Publisher and introduce the message type ROW_SELECTED which the
1301            TableFrame subscribes to and which is issued by OnRangeSelect and
1302            OnSelectCell
1303    
1304            (DataTable.SelectRow): Removed because it's no longer needed in
1305            the row/shape selection scheme
1306    
1307          * Thuban/UI/dialogs.py: New file implementing common classes for          * Thuban/UI/dialogs.py: New file implementing common classes for
1308          dialogs          dialogs
1309    
# Line 53  Line 1357 
1357  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
1358    
1359          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1360            
1361          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1362          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
1363            
1364          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1365          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
1366          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 103  Line 1407 
1407          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
1408          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
1409          link_file method          link_file method
1410            
1411          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1412          the window when the first layer is added to the map.          the window when the first layer is added to the map.
1413    
# Line 140  Line 1444 
1444          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
1445          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1446          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
1447            
1448          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
1449          installer          installer
1450    

Legend:
Removed from v.32  
changed lines
  Added in v.445

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26