/[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 225 by bh, Thu Jul 18 13:04:39 2002 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]>  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          * Thuban/UI/context.py: New module with the context class
894    
895          * Thuban/UI/command.py (Command): Update doc string.          * Thuban/UI/command.py (Command): Update doc string.
# Line 37  Line 927 
927          * Thuban/Model/layer.py (Layer.TreeInfo),          * Thuban/Model/layer.py (Layer.TreeInfo),
928          Thuban/Model/extension.py (Extension.TreeInfo),          Thuban/Model/extension.py (Extension.TreeInfo),
929          Thuban/Model/map.py (Map.TreeInfo),          Thuban/Model/map.py (Map.TreeInfo),
930          Thuban/Model/session.py (Session.TreeInfo):          Thuban/Model/session.py (Session.TreeInfo):
931          Add TreeInfo methods to implement the new tree view update scheme          Add TreeInfo methods to implement the new tree view update scheme
932    
933  2002-07-16  Bernhard Herzog  <[email protected]>  2002-07-16  Bernhard Herzog  <[email protected]>
# Line 118  Line 1008 
1008          * setup.py: In the setup call, make sure that the library          * setup.py: In the setup call, make sure that the library
1009          directories are under $prefix/lib not directly under $prefix.          directories are under $prefix/lib not directly under $prefix.
1010    
1011  2002-06-20      Jan-Oliver Wagner <[email protected]>  2002-06-20  Jan-Oliver Wagner <[email protected]>
1012    
1013          * Thuban/Model/extension.py: new module to handle extension objects.          * Thuban/Model/extension.py: new module to handle extension objects.
1014          * Thuban/Model/messages.py: new messages for extensions.          * Thuban/Model/messages.py: new messages for extensions.
# Line 347  Line 1237 
1237          * Thuban/UI/messages.py (VIEW_POSITION): New message for the          * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1238          position in the statusbar          position in the statusbar
1239    
1240  2002-04-26      Frank Koormann <[email protected]>  2002-04-26  Frank Koormann <[email protected]>
1241    
1242          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1243    
1244  2002-04-24      Frank Koormann <[email protected]>  2002-04-24  Frank Koormann <[email protected]>
1245            
1246          * Resources/Bitmaps/identify.xpm: shadow added          * Resources/Bitmaps/identify.xpm: shadow added
1247    
1248          * Resources/Bitmaps/fullextent.xpm: new          * Resources/Bitmaps/fullextent.xpm: new
           
 2002-04-22      Jan-Oliver Wagner <[email protected]>  
1249    
1250          * Thuban/UI/tree.py (update_tree): added test for None on map bounding box  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]>  2002-04-21  Jan-Oliver Wagner <[email protected]>
1256    
1257          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1258    
1259          * Thuban/UI/tree.py (update_tree): added added map extent          * Thuban/UI/tree.py (update_tree): added added map extent
1260    
1261          * Thuban/UI/mainwindow.py (_method_command): extended by parameter          * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1262          icon; added map_full_extend as tool          icon; added map_full_extend as tool
1263    
1264  2002-04-19      Jan-Oliver Wagner <[email protected]>  2002-04-19  Jan-Oliver Wagner <[email protected]>
1265    
1266          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1267          saving _new_ sessions          saving _new_ sessions
# Line 472  Line 1363 
1363    
1364          * setup.py: increase version number to 0.1          * setup.py: increase version number to 0.1
1365          (data_dist): New command class for data distribution          (data_dist): New command class for data distribution
           
1366    
1367  2001-09-14  Bernhard Herzog  <[email protected]>  2001-09-14  Bernhard Herzog  <[email protected]>
1368    
1369          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1370          Handle the case of no layer (i.e. layer is None) properly.          Handle the case of no layer (i.e. layer is None) properly.
1371    
1372          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1373          Set the initial selection of the combo boxes to reflect the          Set the initial selection of the combo boxes to reflect the
1374          projection we're starting with in a way that works on windows,          projection we're starting with in a way that works on windows,
1375          too.          too.
# Line 589  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 606  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 673  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 723  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 760  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.225  
changed lines
  Added in v.505

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26