/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Diff of /branches/greater-ms3/thuban/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.44  
changed lines
  Added in v.527

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26