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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 445 - (show 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 2003-02-27 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. Fix to create a tuple with a single value instead of
25 simply returning the value.
26
27 * Thuban/UI/renderer.py: Use new Classification and Group functions.
28 Use common.py functions.
29
30 * Thuban/UI/tree.py: Use common.py functions.
31
32 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 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 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 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 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 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 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 2003-02-10 Jonathan Coles <[email protected]>
161
162 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
163 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 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
176 SetDefault*() methods on the layer's classification object.
177 (Layer.__init__): Use the new SetDefault*() methods in the
178 Classification class.
179
180 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
181 object instead of a dictionary.
182
183 * Thuban/UI/classifier.py (ClassRenderer): New class to
184 draw the classifications in the dialog box's table.
185 (Classifier): Modified to use the ClassRenderer class.
186
187 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
188 methods of the Classification class.
189
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 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 2003-01-28 Jonathan Coles <[email protected]>
209
210 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
211 Fixed crashing problem on some systems. Dialog box shows
212 classification data.
213
214 * 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 2003-01-27 Jan-Oliver Wagner <[email protected]>
225
226 * Thuban/__init__.py (_): New.
227
228 * Thuban/Model/classification.py, Thuban/Model/extension.py,
229 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
230 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
237 2003-01-27 Jonathan Coles <[email protected]>
238
239 * Thuban/Model/layer.py: Classification initialization calls.
240
241 * Thuban/Model/classification.py: Created class to encapsulate
242 a layer classification. Supports specific data points and
243 ranges.
244
245 * Thuban/Model/load.py: Added support for loading classification
246 information.
247
248 * Thuban/Model/save.py: Added support for saving classification
249 information.
250
251 * Thuban/UI/classifier.py: Initial class for a dialog box for
252 specifying classification information.
253
254 * Thuban/UI/mainwindows.py: Support for opening the classifier
255 dialog.
256
257 * Thuban/UI/renderer.py: Support for drawing a layer with the
258 classification information.
259
260 * Data/iceland_sample_class.thuban: iceland_sample with
261 classification data.
262
263 * test/test_classification: Tests for the Classification class.
264
265 2002-12-09 Bernhard Herzog <[email protected]>
266
267 * test/test_command.py: New. Tests for the command classes.
268
269 * 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 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 2002-11-06 Frank Koormann <[email protected]>
295
296 * 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
300 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 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 2002-09-20 Bernhard Herzog <[email protected]>
324
325 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
326
327 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
328
329 * 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 * 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 * 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 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 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 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 (MainWindow.build_menu): remove an incorrect comment.
395
396 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 2002-09-06 Bernhard Herzog <[email protected]>
406
407 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
408 VIEW_POSITION
409
410 2002-09-04 Frank Koormann <[email protected]>
411
412 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
413
414 2002-09-02 Bernhard Herzog <[email protected]>
415
416 * 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 * 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 2002-08-30 Bernhard Herzog <[email protected]>
432
433 * 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 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
442 (MapCanvas.do_redraw): Get rid of the unused update_region
443 instance variable
444
445 * Thuban/UI/view.py: Add/update some doc-strings.
446
447 * 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 2002-08-29 Bernhard Herzog <[email protected]>
454
455 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
456 arcs with multiple parts.
457
458 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
459 Handle degenrate rectangles.
460
461 * 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 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 2002-08-26 Bernhard Herzog <[email protected]>
473
474 * 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 * 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 (LayerTableGrid.select_shape): Remove a debug print
484
485 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
486 LayerTableFrame
487
488 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 2002-08-22 Bernhard Herzog <[email protected]>
494
495 * Thuban/Model/table.py (Table.write_record): New method to write
496 records.
497 (Table.__init__): Open the DBF file for writing too.
498
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 * 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 * 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 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 2002-08-16 Jan-Oliver Wagner <[email protected]>
536
537 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
538 tree window already open
539
540 2002-08-15 Bernhard Herzog <[email protected]>
541
542 * 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 * 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 2002-08-14 Bernhard Herzog <[email protected]>
554
555 * 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 * 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 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 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 2002-07-24 Bernhard Herzog <[email protected]>
614
615 * 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 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
634 window size into a parameter.
635
636 2002-07-23 Bernhard Herzog <[email protected]>
637
638 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
639 just commands.
640
641 * 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 2002-07-19 Bernhard Herzog <[email protected]>
651
652 * 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 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
664 Only have to (un)subscribe CHANGED
665
666 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
667
668 * 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 2002-07-18 Bernhard Herzog <[email protected]>
673
674 * 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 * 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 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 Thuban/Model/session.py (Session.TreeInfo):
725 Add TreeInfo methods to implement the new tree view update scheme
726
727 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 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 2002-07-09 Bernhard Herzog <[email protected]>
752
753 * setup.py: In the setup call, use the thuban homepage as the
754 value of the url parameter.
755
756 * 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 * 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 * 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 2002-07-08 Bernhard Herzog <[email protected]>
784
785 * 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 * 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 2002-06-20 Jan-Oliver Wagner <[email protected]>
806
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 2002-05-29 Bernhard Herzog <[email protected]>
816
817 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
818 the events for a command.
819 (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 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 * 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 2002-05-23 Bernhard Herzog <[email protected]>
847
848 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
849 layer_outline_color. Fix it in the definition of the command too.
850
851 * Thuban/UI/command.py (Command): Fix typo in doc string
852
853 2002-05-22 Bernhard Herzog <[email protected]>
854
855 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
856 in the docstring
857
858 2002-05-15 Bernhard Herzog <[email protected]>
859
860 * 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 * 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 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 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 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 2002-05-07 Bernhard Herzog <[email protected]>
910
911 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
912 the file to have a .thuban extension.
913
914 * 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 * 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 2002-05-03 Bernhard Herzog <[email protected]>
978
979 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
980 MainWindow.OpenSession): Change the file extension of the session
981 files to .thuban
982
983 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
984 Move the map channels to be forwarded by the session into the
985 class constant with forwarded_channels. Also add
986 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
987 forwarded_channels
988
989 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
990 typo and some rewording).
991
992 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 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 2002-04-26 Frank Koormann <[email protected]>
1035
1036 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1037
1038 2002-04-24 Frank Koormann <[email protected]>
1039
1040 * Resources/Bitmaps/identify.xpm: shadow added
1041
1042 * Resources/Bitmaps/fullextent.xpm: new
1043
1044 2002-04-22 Jan-Oliver Wagner <[email protected]>
1045
1046 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1047 box
1048
1049 2002-04-21 Jan-Oliver Wagner <[email protected]>
1050
1051 * 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 icon; added map_full_extend as tool
1057
1058 2002-04-19 Jan-Oliver Wagner <[email protected]>
1059
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 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 2002-04-04 Bernhard Herzog <[email protected]>
1091
1092 * setup.py (thuban_bdist_rpm.initialize_options): Use
1093 initialize_options to create the scripts for the rpm.
1094
1095 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1096
1097 2002-04-03 Bernhard Herzog <[email protected]>
1098
1099 * setup.py: Increment version to 0.1.1
1100
1101 * 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 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 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 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 2002-01-14 Bernhard Herzog <[email protected]>
1148
1149 * setup.py (data_dist.make_distribution): Fix some typos
1150
1151 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 2001-09-14 Bernhard Herzog <[email protected]>
1162
1163 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1164 Handle the case of no layer (i.e. layer is None) properly.
1165
1166 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1167 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 * 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 2001-09-13 Bernhard Herzog <[email protected]>
1179
1180 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1181 deselect the layer if no layer is selected
1182
1183 * 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 (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
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 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 2001-09-10 Bernhard Herzog <[email protected]>
1222
1223 * 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 * 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 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 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1251 height do nothing (avoids zero division errors)
1252
1253 2001-09-06 Bernhard Herzog <[email protected]>
1254
1255 * 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 * 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 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1277 * Thuban/UI/application.py (ThubanApplication.OnInit):
1278 * 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 * 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 (TableGrid):
1294 (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 * 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 2001-09-05 Bernhard Herzog <[email protected]>
1358
1359 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1360
1361 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1362 interactor to pass through to the MapCanvas
1363
1364 * 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 2001-09-04 Bernhard Herzog <[email protected]>
1370
1371 * 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 * 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 2001-09-03 Bernhard Herzog <[email protected]>
1398
1399 * 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
1411 * 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 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
1448 * 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 2001-08-28 Bernhard Herzog <[email protected]>
1465
1466 * setup.py: Fix some doc strings
1467
1468 * 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