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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 477 - (show annotations)
Thu Mar 6 15:03:48 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 59379 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26