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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 426 - (show annotations)
Mon Feb 24 18:45:37 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 54613 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26