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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 456 - (show annotations)
Tue Mar 4 11:32:31 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 56981 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26