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

Legend:
Removed from v.48  
changed lines
  Added in v.505

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26