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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 448 - (show annotations)
Tue Mar 4 10:32:42 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 56487 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26