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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 459 - (show annotations)
Wed Mar 5 18:16:06 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 58831 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26