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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 475 - (show annotations)
Wed Mar 5 18:40:25 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 59141 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26