/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Annotation of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


Revision 445 - (hide annotations)
Thu Feb 27 16:03:17 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 55679 byte(s)
updated ChangeLog

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

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26