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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 434 - (show annotations)
Thu Feb 27 15:51:55 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 55595 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26