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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 680 - (show annotations)
Tue Apr 15 21:54:12 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 93116 byte(s)
updated ChangeLog

1 2003-04-15 Jonathan Coles <[email protected]>
2
3 * Thuban/Model/classification.py: Implemented __repr__ for
4 the ClassGroup* classes to make debugging a bit easier.
5 (ClassGroup.SetLabel): Check that the string is an instance
6 of StringTypes not StringType. Accounts for Unicode strings.
7
8 * Thuban/Model/color.py: Implemented __repr__ to make
9 debugging a bit easier.
10
11 * Thuban/Model/save.py (Saver.write_classification): Need to
12 save the group label.
13
14 * test/test_load.py (testClassification): New. Loads the
15 iceland_sample_test.thuban file and checks if it was loaded
16 correctly.
17
18 2003-04-15 Jonathan Coles <[email protected]>
19
20 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
21 to improve rendering performance by initializing the variables
22 that are not change each time draw_polygon_shape() is called.
23 The values are stored in a global struct draw_info.
24 (draw_polygon_shape): Removed initialization code that is
25 now in draw_polygon_init().
26
27 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
28 drawing initialization call to draw_polygon_init()
29 (MapRenderer.draw_polygon_shape): Use new signature of
30 draw_polygon_shape.
31
32 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
33 weirdness by setting the range to (1, maxint).
34
35 * Thuban/Model/classification.py (ClassGroupProperties): Make
36 instance variables private and optimize comparison operator
37 by first checking if the color references are the same.
38 (ClassGroupSingleton): Make instance variables private.
39 (ClassGroupRange): Make instance variables private.
40
41 * HOWTO-Release: Filled in missing steps for releasing packages.
42
43 2003-04-15 Bernhard Herzog <[email protected]>
44
45 First stab at internationalized messages:
46
47 * Thuban/__init__.py (_): Implement the translation function for
48 real using the python gettext module.
49
50 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
51 translate empty strings.
52
53 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
54 Add a missing space to a warning message
55
56 * po/README: New. Notes about the management of the translation
57 files.
58
59 * po/Makefile: New. Makefile to help manage the translation files.
60
61 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
62
63 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
64 translations and support files in po/
65
66 * setup.py (data_files): Add the *.mo files to the data_files too
67
68 * README: Add note about the translations when building from CVS
69
70 2003-04-14 Jonathan Coles <[email protected]>
71
72 * Thuban/UI/dock.py: Fixes some window resizing problems most
73 noticable under windows. Always assume the button bitmaps will
74 be there. Code clean up.
75 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
76 images for the dock/undock button to the same images.
77 Work around for RTbug #1801.
78
79 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
80 be allowed to grow within the sizer. Fixes a bug under Windows
81 where the toolbar wasn't being drawn.
82
83 2003-04-14 Frank Koormann <[email protected]>
84
85 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
86 Updated design to try to make the button functionality more
87 transparent.
88
89 2003-04-14 Jonathan Coles <[email protected]>
90
91 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
92 finalize the intialization of the panel.
93
94 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
95 creation of the panel. Should be the last thing called in the
96 initializer of a subclass.
97
98 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
99 set the current selections in the combo boxes. This is needed
100 under Windows.
101
102 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
103 level panel to the dialog so that the background colors are
104 consistent under Windows.
105
106 2003-04-11 Jonathan Coles <[email protected]>
107
108 * Thuban/UI/classgen.py: Change color ramps to start at white
109 not black.
110
111 * Thuban/UI/legend.py: Enable/disable the legend buttons when
112 the legend changes. Fixes RTbug #1793.
113
114 * test/test_classification.py: Added test for copying of
115 classifications.
116
117 2003-04-11 Jonathan Coles <[email protected]>
118
119 * Thuban/UI/resource.py: New. Centralize the loading of resources
120 such as bitmaps.
121
122 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
123 added images to the move buttons, added 'reverse' button.
124 (CustomRampPanel.__init__): Added images to the move buttons.
125 (GreyRamp): New. Generates a ramp from white to black.
126 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
127
128 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
129 ID_PROPERTY_*.
130 (Classifier.__init__): Minor changes to the layout.
131 (Classifier._OnTitleChanged): Listen for when the user edits the
132 title and update the dialog's title and the layer's title.
133
134 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
135
136 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
137 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
138 if the layer's title changes.
139
140 * Thuban/UI/mainwindow.py: Added new menu item and associated code
141 to open a dialog to rename the map.
142 (MainWindow): Use new resource class to import bitmaps.
143
144 2003-04-11 Jonathan Coles <[email protected]>
145
146 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
147 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
148 Resources/Bitmaps/group_use_none.xpm,
149 Resources/Bitmaps/group_use_not.xpm,
150 Resources/Bitmaps/hide_layer.xpm,
151 Resources/Bitmaps/layer_properties.xpm,
152 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
153 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
154 New.
155
156 2003-04-10 Jonathan Coles <[email protected]>
157
158 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
159 Should pass group to ClassGroup constructor.
160
161 2003-04-10 Jonathan Coles <[email protected]>
162
163 * Thuban/Model/classification.py: (ClassGroup): Move all the common
164 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
165 here. Implement SetVisible(), IsVisible().
166 (ClassGroup.__init__): Add group parameter which acts as a copy
167 constructor.
168
169 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
170 "Visible" check boxes.
171 (Classifier): Rename the buttons and refactor the code to match
172 the new labels.
173
174 * Thuban/UI/legend.py: Classify button is now called "Properties".
175 Refactored the code to change variable names.
176 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
177
178 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
179 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
180 renamed to MainWindow.LayerEditProperties.
181 (MainWindow.ToggleLegend): Don't include map name in legend title.
182 (MainWindow.SetMap): Added the map name to the window title.
183 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
184 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
185 Functionality is found in the layer properties dialog.
186
187 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
188 draw visible groups.
189
190 2003-04-09 Jonathan Coles <[email protected]>
191
192 * Thuban/UI/classgen.py: Modifications to allow simple
193 addition and selection of new color schemes.
194 (MonochromaticRamp): New. Generates a ramp between two colors.
195 (RedRamp): New. Generates a ramp of all red.
196 (GreenRamp): New. Generates a ramp of all green.
197 (BlueRamp): New. Generates a ramp of all blue.
198
199 2003-04-09 Jonathan Coles <[email protected]>
200
201 * Thuban/Model/classification.py (Classification.__deepcopy__):
202 Need to copy over field and fieldType attributes.
203
204 * Thuban/Model/table.py (Table.field_range): New. Retrive the
205 maximum and minimum values over the entire table for a given
206 field.
207 (Table.GetUniqueValues): New. Retrieve all the unique values
208 in the table for a given field.
209
210 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
211 (GenUniquePanel): New. Controls to allow the user to select
212 which unique field values they would like in the classification.
213 (CustomRampPanel): Code that was in ClassGenDialog that allows
214 the user to select the properties for a custom ramp.
215 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
216
217 * Thuban/UI/classifier.py: Removed a lot of debugging code.
218 (Classifier._SetClassification): Callback method so that the
219 class generator can set the classification in the grid.
220 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
221 editing of a group properties class into a wxWindows control.
222
223 * Thuban/UI/dock.py: It was decided that if the user closes
224 a dockable window the window should simply hide itself. That
225 way if the user wants to show the dock again it appears in the
226 same place as it was when it was closed.
227 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
228 (DockableWindow._OnButtonClose): Hide the window instead of
229 destroying it.
230 (DockableWindow._OnClose): Hide the window instead of
231 destroying it.
232
233 * Thuban/UI/legend.py (LegendTree): Use a private method to
234 consistently set the font and style of the text. Fixes RTbug #1786.
235
236 * Thuban/UI/mainwindow.py: Import just the Classifier class.
237
238 2003-04-07 Bernhard Herzog <[email protected]>
239
240 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
241 to the map module
242
243 2003-04-07 Bernhard Herzog <[email protected]>
244
245 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
246 favor of ToggleSessionTree
247 (MainWindow.ToggleSessionTree): New method to toggle visibility of
248 the session tree.
249 (MainWindow.SessionTreeShown): New method to return whether the
250 session tree is currently shown.
251 (MainWindow.ToggleLegend): New method to toggle visibility of the
252 legend
253 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
254 LegendShown
255 (MainWindow.LegendShown): New method to return whether the legend
256 is currently shown.
257 (_method_command): Add checked parameter so we can define check
258 menu items
259 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
260 mainwindow methods.
261 (show_session_tree, show_legend commands): Removed.
262 (toggle_session_tree, toggle_legend commands): New commands to
263 toggle the visibility of the dialogs
264
265 2003-04-07 Jonathan Coles <[email protected]>
266
267 * Thuban/UI/classgen.py: Fix Windows problem.
268
269 * Thuban/UI/dock.py: Fix Windows problem.
270
271 * Thuban/UI/mainwindow.py: Use False instead of false.
272 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
273
274 2003-04-07 Jonathan Coles <[email protected]>
275
276 Since we now say that the order of the groups in a classification
277 matters, it makes sense to be able to manipulate that order. Most
278 of the changes to Thuban/Model/classification.py are to that end.
279
280 * Thuban/Model/classification.py (Classification.AppendGroup,
281 Classification.InsertGroup, Classification.ReplaceGroup,
282 Classification.RemoveGroup, Classification.GetGroup): Do as the
283 names imply.
284 (Classification.FindGroup): This was called GetGroup, but GetGroup
285 takes an index, while FindGroup takes a value.
286 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
287 REFERENCE. Currently there is a cyclic reference between the layer
288 and its classification. If the classification doesn't need to know
289 its owning layer we can change this, since it may make sense to be
290 able to use the same classification with different layers.
291
292 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
293
294 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
295 not AddGroup()
296
297 * Thuban/UI/classifier.py: Now that we can depend on the order in
298 a Classification and have methods to manipulate that order we don't
299 need to use our own data structures in the grid. We can simply make
300 the grid/table access the information they need from a copy of
301 the classification object.
302 (Classifier._OnCloseBtn): Event handler for when the user clicks
303 'Close'. This is needed so if the user applies changes and then
304 continues to change the table the user has the option of discarding
305 the most recent changes and keeping what they applied.
306
307 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
308 into the same group.
309
310 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
311 with a really old version of proj, PJ_VERSION won't even be defined.
312 If it isn't defined then just compile so that the function always
313 returns Py_False.
314
315 * test/test_classification.py: Fix tests to use the renamed methods.
316 Still need to write tests for the new methods.
317
318 2003-04-04 Jonathan Coles <[email protected]>
319
320 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
321 call to SetSelection out of the method and before the call
322 to __SelectField in __init__. This prevents a recursion of events
323 when _OnFieldSelect is triggered by the user.
324
325 2003-04-04 Jonathan Coles <[email protected]>
326
327 * Thuban/Model/classification.py: Rename Color.None to
328 Color.Transparent.
329 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
330 Don't bother copying the color, since Colors are immutable.
331
332 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
333 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
334 Thuban/UI/renderer.py, Thuban/UI/view.py:
335 Rename Color.None to Color.Transparent.
336
337 * test/test_classification.py, test/test_load.py: Rename Color.None
338 to Color.Transparent.
339
340 2003-04-04 Jonathan Coles <[email protected]>
341
342 * Thuban/Model/classification.py: Fix assert calls.
343 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
344 Copy the color parameter rather than hold onto a reference.
345
346 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
347 the color object.
348 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
349 are sure there exists only one refernce to Color.None in the system.
350 This allows us to use 'is' rather than the comparision functions.
351
352 * Thuban/Model/save.py: Fix assert calls.
353
354 * Thuban/UI/classifier.py: Fix assert calls.
355 (ClassGrid._OnCellDClick): Call up to the classifier to open the
356 dialog to edit the groups properties.
357 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
358 correctly if a cell is resized.
359 (ClassTable.SetClassification): New. Changes the classification
360 that is in the table.
361 (ClassTable.__SetRow): Allow groups to be prepended.
362 (Classifier): New code for opening the EditProperties and
363 GenerateRanges dialogs.
364 (SelectPropertiesDialog.__GetColor): Only set the color in the
365 color dialog if the current color is not None.
366
367 * Thuban/UI/dock.py: Fix assert calls.
368
369 * Thuban/UI/legend.py: Fix assert calls.
370
371 * Thuban/UI/renderer.py: Fix assert calls.
372
373 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
374 classifications.
375 (GenRangePanel): Panel specific to range generation.
376 (GenSingletonPanel): Panel specific to singleton generation.
377 (ClassGenerator): Class responsible for actually generating
378 the classification from the data gathered in the dialog box.
379 (PropertyRamp): Generates properties whose values range from
380 a starting property to an ending property.
381
382 2003-04-03 Bernhard Herzog <[email protected]>
383
384 * test/support.py (print_garbage_information): New function that
385 prints information about still connected messages and memory
386 leaks.
387 (run_suite): Removed.
388 (run_tests): New function for use as a replacement of
389 unittest.main in the test_* files. This one calls
390 print_garbage_information at the end.
391
392 * test/runtests.py (main): Use support.print_garbage_information
393
394 * test/test_layer.py: Use support.run_tests instead of
395 unittest.main so we get memory leak information
396 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
397 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
398 (TestLayerLegend.test_visibility): Call the layer's Destroy method
399 to fix a memory leak.
400
401 * test/test_classification.py: Use support.run_tests instead of
402 unittest.main so we get memory leak information
403 (TestClassification.test_classification): Call the layer's Destroy
404 method to fix a memory leak.
405
406 2003-04-02 Bernhard Herzog <[email protected]>
407
408 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
409 Handle the reference counts of the return value and errors in
410 PyArg_ParseTuple correctly.
411
412 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
413 sure the filename is absolute to avoid problems when saving the
414 session again
415
416 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
417
418 2003-04-01 Jonathan Coles <[email protected]>
419
420 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
421 that there actually are points in the returned list of points
422 before trying to index into the list. The list may be empty if
423 the shape is a Null Shape.
424
425 2003-04-01 Bernhard Herzog <[email protected]>
426
427 * test/test_map.py: Don't use from <module> import *
428
429 2003-04-01 Jonathan Coles <[email protected]>
430
431 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
432 LAYER_LEGEND_CHANGED
433
434 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
435 self.Destroy() to close the window after yesterday's changes.
436
437 * test/test_map.py, test/test_session.py: Fix messages that
438 are sent from maps and layers.
439
440 2003-03-31 Jonathan Coles <[email protected]>
441
442 * Thuban/UI/classifier.py: Commented out some debugging statements.
443 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
444 RTbug #1769.
445
446 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
447 position (although position doesn't work yet under GTK).
448 (DockableWindow.Destroy): New. Called when the window must be
449 closed. Namely needed when the DockFrame closes and must close
450 its children.
451 (DockFrame): Listen for EVT_CLOSE and destroy all children.
452
453 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
454 when then window is told to close.
455 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
456 comment in source for more info.
457
458 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
459
460 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
461 symmetry with other such methods.
462 (MainWindow.ShowLegend): Show the legend docked by default.
463
464 2003-03-28 Jonathan Coles <[email protected]>
465
466 * Thuban/UI/classifier.py: Support for highlighting a specific
467 group within the grid when the classification dialog is opened.
468 Also contains a lot of debugging printouts which will later
469 be removed.
470
471 * Thuban/UI/dock.py: Complete rework on the dock code so that
472 that it is fairly removed from the rest of the Thuban application.
473 It is easy to add new docks which the rest of the program having
474 to be aware of them.
475
476 * Thuban/UI/legend.py: Modifications to support selecting a
477 specific group in the classification dialog. Changed how layers
478 are drawn when the layer is visible/invisible.
479
480 * Thuban/UI/mainwindow.py: Removed legend specific code and
481 replaced it with calls to the new dock code.
482
483 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
484 to check if scale > 0. Trying to track down a divide by zero.
485
486 2003-03-26 Jonathan Coles <[email protected]>
487
488 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
489 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
490 now part of DockableWindow.
491 (LegendPanel.DoOnSelChanged): Select the current layer in the
492 map.
493 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
494 with the selected layer and/or group.
495
496 2003-03-26 Jonathan Coles <[email protected]>
497
498 This putback contains the code for dockable windows. There is
499 no support in wxWindows as of this date for windows that can
500 attach themselves to other windows.
501
502 The current model contains a DockableWindow which has a parent
503 window for when it is detached and a dock window that it puts
504 its contents in when it is docked. The contents of a DockableWindow
505 must be a DockPanel. DockPanel itself derives from wxPanel.
506
507 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
508 message, not a LAYER_LEGEND_CHANGED message.
509
510 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
511
512 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
513 as one of the style properties for the fieldTypeText item to
514 be sure that its size is correct when the text changes.
515
516 * Thuban/UI/dock.py: New. Classes for the DockPanel and
517 DockableWindow.
518
519 * Thuban/UI/legend.py: Added some more buttons and made the
520 LegendPanel a DockPanel.
521
522 * Thuban/UI/mainwindow.py: Added sash windows to the main window
523 and supporting functions for manipulating the sashes.
524 (MainWindow.ShowLegend): Create a DockableWindow with the
525 LegendPanel as the contents.
526
527 * Thuban/UI/messages.py: Added DOCKABLE_* messages
528
529 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
530 not LAYER_LEGEND_CHANGED, messages.
531
532 2003-03-25 Jonathan Coles <[email protected]>
533
534 * setup.py: Added custom script bdist_rpm_build_script so that
535 when the rpm is built the path to wx-config is correct.
536
537 * setup.cfg: Added line saying to use the custom build script
538
539 2003-03-20 Jonathan Coles <[email protected]>
540
541 Initial implementation of the Legend.
542
543 * Thuban/UI/legend.py: New. Creates a window that shows the map's
544 Legend information and allows the user to add/modify classifications
545 and how the layers are drawn on the map.
546
547 * setup.py: New command 'build_docs' which currently uses
548 happydoc to generate html documentation for Thuban.
549
550 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
551 Returns a string which is appropriately describes the group.
552
553 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
554 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
555
556 * Thuban/Model/map.py (Map): Rename messages and use new, more
557 specific, messages.
558
559 * Thuban/Model/messages.py: New message to indicate that a layer's
560 data has changed (LAYER_CHANGED). New map messages to indicate
561 when layers have been added/removed/changed or if the stacking order
562 of the layers has changed.
563
564 * Thuban/Model/session.py: Rename and use new messages.
565
566 * Thuban/UI/classifier.py: Remember if any changes have actually
567 been applied so that if the dialog is cancelled without an application
568 of changes we don't have to set a new classification.
569 (ClassDataPreviewer): Pulled out the window specific code and put it
570 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
571 symbols on any DC.
572
573 * Thuban/UI/mainwindow.py: New code to open the legend.
574
575 * Thuban/UI/view.py: Use new message names.
576
577 2003-03-19 Jonathan Coles <[email protected]>
578
579 * Thuban/UI/main.py (verify_versions): New. Checks the versions
580 of Python, wxPython, and some other libraries.
581
582 * extensions/thuban/wxproj.cpp (check_version): Checks the given
583 version against what wxproj was compiled with.
584 (check_version_gtk): If wxproj was compiled with gtk then check
585 the given version against the version of the gtk library
586 currently being used.
587
588 2003-03-14 Bernhard Herzog <[email protected]>
589
590 * test/test_command.py: Run the tests when the module is run as a
591 script
592
593 2003-03-14 Bernhard Herzog <[email protected]>
594
595 Implement selection of multiple selected shapes in the same layer:
596
597 - Introduce a new class to hold the selection. This basically
598 replaces the interactor which was nothing more than the
599 selection anyway. A major difference is of course that the new
600 selection class supports multiple selected shapes in one layer
601
602 - Move the object that represents the selection from the
603 application to the canvas. The canvas is a better place than the
604 application because the selection represents which shapes and
605 layer of the map displayed by the canvas are selected and
606 affects how the map is drawn.
607
608 - Make the selection and its messages publicly available through
609 the mainwindow.
610
611 - The non-modal dialogs do not get a reference to the interactor
612 anymore as they can simply refer to their parent, the
613 mainwindow, for the what the interactor had to offer.
614
615 * Thuban/UI/selection.py: New module with a class to represent the
616 selection.
617
618 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
619 these unused messages
620
621 * Thuban/UI/application.py (ThubanApplication.OnInit)
622 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
623 interactor is gone now.
624 (ThubanApplication.CreateMainWindow): There is no interactor
625 anymore so we pass None as the interactor argument for now for
626 compatibility.
627
628 * Thuban/UI/view.py (MapCanvas.delegated_messages)
629 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
630 Unsubscribe, delegate messages according to the delegated_messages
631 class variable.
632 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
633 attributes from instance variables as described with the
634 delegated_methods class variable.
635 (MapCanvas.__init__): New instance variable selection holding the
636 current selection
637 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
638 pass them on to the renderer
639 (MapCanvas.SetMap): Clear the selection when a different map is
640 selected.
641 (MapCanvas.shape_selected): Simple force a complete redraw. The
642 selection class now takes care of only issueing SHAPES_SELECTED
643 messages when the set of selected shapes actually does change.
644 (MapCanvas.SelectShapeAt): The selection is now managed in
645 self.selection
646
647 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
648 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
649 Unsubscribe, delegate messages according to the delegated_messages
650 class variable.
651 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
652 attributes from instance variables as described with the
653 delegated_methods class variable.
654 (MainWindow.__init__): The interactor as ivar is gone. The
655 parameter is still there for compatibility. The selection messages
656 now come from the canvas.
657 (MainWindow.current_layer, MainWindow.has_selected_layer):
658 Delegate to the the canvas.
659 (MainWindow.LayerShowTable, MainWindow.Classify)
660 (MainWindow.identify_view_on_demand): The dialogs don't need the
661 interactor parameter anymore.
662
663 * Thuban/UI/tableview.py (TableFrame.__init__)
664 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
665 (LayerTableFrame.row_selected): The interactor is gone. It's job
666 from the dialog's point of view is now done by the mainwindow,
667 i.e. the parent. Subscribe to SHAPES_SELECTED instead
668 of SELECTED_SHAPE
669
670 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
671 is gone. It's job from the dialog's point of view is now done by
672 the mainwindow, i.e. the parent.
673
674 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
675 gone. It's job from the dialog's point of view is now done by the
676 mainwindow, i.e. the parent.
677
678 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
679 gone. It's job from the dialog's point of view is now done by the
680 mainwindow, i.e. the parent.
681 (SessionTreeCtrl.__init__): New parameter mainwindow which is
682 stored as self.mainwindow. The mainwindow is need so that the tree
683 can still subscribe to the selection messages.
684 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
685 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
686 selection is now accessible through the mainwindow. Subscribe to
687 SHAPES_SELECTED instead of SELECTED_SHAPE
688
689 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
690 SHAPES_SELECTED message now.
691 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
692 so deal with multiple shapes
693 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
694 gone. It's job from the dialog's point of view is now done by the
695 mainwindow, i.e. the parent.
696
697 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
698 parameter is now a list of shape ids.
699 (RecordTable.SetTable): The second parameter is now a list of
700 indices.
701
702 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
703 selected_shape parameter and ivar to selected_shapes. It's now a
704 list of shape ids.
705 (MapRenderer.draw_label_layer): Deal with multiple selected
706 shapes. Rearrange the code a bit so that the setup and shape type
707 distinctions are only executed once.
708
709 * test/test_selection.py: Test cases for the selection class
710
711 2003-03-11 Jonathan Coles <[email protected]>
712
713 * Thuban/Model/load.py: Temporary fix so that the xml reader
714 doesn't cause Thuban to crash.
715
716 * Thuban/Model/layer.py: Handle the cyclic references between
717 a layer and its classification better, and be sure to disconnect
718 the classification from the layer when the layer is destroyed
719 so that we don't maintain a cyclic reference that may not be
720 garbage collected.
721
722 * Thuban/Model/classification.py: See comment for layer.py.
723
724 2003-03-12 Jan-Oliver Wagner <[email protected]>
725
726 * HOWTO-Release: New. Information on the steps for releasing
727 a new version of Thuban.
728
729 2003-03-11 Jonathan Coles <[email protected]>
730
731 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
732 Use True instead of true.
733 (Classifier): Should have a single panel in which all the controls lie.
734
735 * Thuban/UI/proj4dialog.py: Add normal border.
736
737 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
738
739 * Thuban/UI/mainwindow.py: Use True instead of true.
740
741 * setup.py: Update some definitions to use wxWindows2.4 files
742
743 * Data/iceland_sample_class.thuban: Fixed file so that the
744 field_type information is present.
745
746 2003-03-10 Jonathan Coles <[email protected]>
747
748 * Thuban/UI/classifier.py (Classifier.__init__): Make the
749 field type label grow so that when the text changes the
750 size is updated correctly. This may be a wxWindows bug.
751
752 2003-03-10 Jonathan Coles <[email protected]>
753
754 * Thuban/UI/application.py: Changed SESSION_CHANGED to
755 SESSION_REPLACED.
756
757 * Thuban/UI/classifier.py: Wrap text with _().
758 (ClassGrid.CreateTable): Set dimensions and size hints here,
759 instead of in Reset, so we only set the size once.
760
761 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
762
763 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
764 Call Close() instead of Shutdown().
765
766 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
767
768 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
769 Go back to using OnClose() instead of Shutdown().
770
771 2003-03-10 Jonathan Coles <[email protected]>
772
773 * Thuban/UI/classifier.py (Classifier): SelectField() needed
774 to know the old field index as well as the new one.
775
776 2003-03-10 Jonathan Coles <[email protected]>
777
778 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
779 to correctly set the table information and call this from
780 __init__ and from _OnFieldSelect so that all the information
781 is up to date when the dialog opens and when a field is changed.
782
783 2003-03-10 Jonathan Coles <[email protected]>
784
785 * Thuban/Model/classification.py (Classification): Don't use
786 layer's message function directly, use the ClassChanged() method
787 when then classification changes. SetField/SetFieldType/SetLayer
788 must keep the information about field name and field type in
789 sync when an owning layer is set or removed.
790
791 * Thuban/Model/layer.py: Added ClassChanged() so that the
792 classification can tell the layer when its data has changed.
793 (Layer.SetClassification): Accepts None as an arguement to
794 remove the current classification and correctly handles
795 adding a new classification.
796
797 * Thuban/Model/load.py: Comment out print statement
798
799 * test/test_classification.py, test/test_save.py: New and
800 improved tests.
801
802 2003-03-07 Jonathan Coles <[email protected]>
803
804 * Thuban/Model/classification.py: Implemented __copy__ and
805 __deepcopy__ for ClassGroup* and ClassGroupProperites so
806 they can easily be copied by the classifier dialog.
807 (ClassGroupProperites.__init__): The default line color should
808 have been Color.Black.
809
810 * Thuban/UI/classifier.py: Setting and Getting table values now
811 uses a consistent set of functions.
812 (Classifier): Now non-modal. Has field type label which changes
813 as the field changes. Keep track of buttons in a list so that
814 we can enable/disable the buttons when the None field is selected.
815 (SelectPropertiesDialog): Add buttons to make the colors transparent.
816
817 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
818 does what OnClose did, but can be called by the application to
819 close a window. Needed when a session changes, and we have to
820 close the classifier windows.
821
822 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
823 Shuts down open dialogs. Used when a new session is created
824 or a session is opened.
825 (MainWindow.SaveSession): Should only call application.SaveSession()
826 if we don't call SaveSessionAs first.
827 (MainWindow.Classify): Allow different classifier dialogs for
828 different layers.
829
830 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
831 the parent class handle it. Add Shutdown() to unsubscibe from
832 event notification and call the parent Shutdown(). This was
833 necessary so the application can close the tree window.
834
835 2003-03-06 Jonathan Coles <[email protected]>
836
837 * Thuban/Model/classification.py: Minor documentation changes,
838 Addition of __eq__ and __ne__ methods.
839 (Classification.SetLayer): prevent recursion between this method
840 and Layer.SetClassification().
841
842 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
843
844 * Thuban/Model/layer.py (SetClassification): prevent recursion
845 between this method and Classification.SetLayer().
846
847 * test/test_classification.py, test/test_load.py,
848 test/test_session.py: Fixed and added tests for the classification
849 classes.
850
851 2003-03-06 Bernhard Herzog <[email protected]>
852
853 * Thuban/UI/classifier.py (ClassGrid.__init__)
854 (ClassGrid.CreateTable): Move the SetSelectionMode call to
855 CreateTable because otherwise it triggers an assertion in
856 wxPython/wxGTK 2.4.
857
858 2003-03-05 Jonathan Coles <[email protected]>
859
860 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
861
862 * Thuban/Model/load.py: import FIELDTYPE constants from table.
863
864 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
865
866 * Thuban/Model/table.py: Put FIELDTYPE constants back.
867
868 2003-03-05 Jonathan Coles <[email protected]>
869
870 * Thuban/UI/classifier.py: Added class documentation.
871 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
872 Store just the groups in the table and generate the other
873 column information when it is requested. Add "None" field
874 to pull-down to select no classification.
875
876 * Thuban/common.py: Moved FIELDTYPE constants from table.py
877 (Str2Num): Only catch ValueError exceptions.
878
879 * Thuban/Model/classification.py: Class documentation. Renaming
880 of methods with Stroke to Line. Groups are stored in a single
881 list with the default as the first element. Groups are searched
882 in the order they appear in the list.
883
884 * Thuban/Model/color.py: Documentation.
885
886 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
887 the kind of data represented by a field.
888
889 * Thuban/Model/load.py (ProcessSession): Use proper string
890 conversion function; fixes RTbug #1713.
891
892 * Thuban/Model/save.py (Saver): Store field type information.
893
894 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
895 (Table): Add field_info_by_name() to retrieve field information
896 by specifying the field name, not the number.
897
898 * Thuban/UI/mainwindow.py: Function name changes.
899
900 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
901 get the layer classification once. Don't try to classify
902 values when the field is None: just use the default properties.
903
904 * Thuban/UI/view.py: Function name changes.
905
906 * Doc/thuban.dtd: Add field_type attribute to a classification.
907
908 2003-03-04 Bernhard Herzog <[email protected]>
909
910 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
911 the fill and stroke layer attributes optional with suitable
912 default values. Add the stroke_width layer attribute. Use correct
913 syntax for empty elements. Make the attribute list for labels
914 refer to the label element.
915
916 2003-03-04 Bernhard Herzog <[email protected]>
917
918 * setup.py (thuban_build_py.build): Add a comment about distutils in
919 Python 2.3 containing some of the functionality we implement in
920 setup.py ourselves.
921
922 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
923 before the selection mode. Doing it the other way round triggers
924 an assertion in wxWindows.
925
926 * Thuban/Model/save.py (escape): Fix typo in doc-string
927
928 * Thuban/Model/classification.py: Remove unnecessary wxPython
929 import
930
931 2003-03-04 Jonathan Coles <[email protected]>
932
933 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
934 Parameter 'value' should default to None.
935
936 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
937 the class attribute __classification is now private.
938
939 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
940 Classifier to ClassGrid. Added support for removing selected rows,
941 which including code for keeping track of when cells are selected,
942 and deselected.
943 (ClassTable): Support for added/removing rows. Fixed a problem
944 with __ParseInput whereby it would not allow strings (only numbers)
945 to be entered.
946 (Classifier): Added button and supporting code for removing
947 selected rows.
948
949 2003-02-27 Jonathan Coles <[email protected]>
950
951 * Thuban/common.py: Moved color conversion functions into
952 Thuban/UI/common.py.
953 (Str2Num): Now converts the float (not the string) to a long/int
954 so that an exception isn't thrown.
955
956 * Thuban/UI/common.py: Common functions used in several UI modules
957
958 * Thuban/Model/classification.py: Changed the class hierarchy
959 so that a Classification consists of Groups which return
960 Properties when a value matches a Group.
961
962 * Thuban/Model/layer.py: Fixed name resolution problem.
963
964 * Thuban/Model/load.py: Use new Classification and Group functions.
965
966 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
967 failure.
968 (Saver.write_classification): Use new Classification and Group
969 functions.
970
971 * Thuban/UI/classifier.py: Changes to use new Classification and Group
972 functions. Fix to create a tuple with a single value instead of
973 simply returning the value.
974
975 * Thuban/UI/renderer.py: Use new Classification and Group functions.
976 Use common.py functions.
977
978 * Thuban/UI/tree.py: Use common.py functions.
979
980 * test/test_classification.py: Use new Classification and Group
981 classes.
982
983 2003-02-24 Jonathan Coles <[email protected]>
984
985 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
986 functions from Thuban color objects to wxWindow colour objects.
987
988 * Thuban/Model/classification.py (Classification): Renamed
989 GetProperties() to GetClassData(). Used the new iterator
990 in TreeInfo().
991 (ClassIterator): Iterator implementation to iterate over the
992 ClassData objects in a classification object.
993
994 * Thuban/Model/save.py (Saver.write_classificaton): Uses
995 the new iterator to save the classification information.
996
997 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
998 for changing the stroke and fill colors and previewing the
999 changes.
1000
1001 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
1002 MainWindow.SaveSessionAs): Text string changes so the dialogs
1003 have more meaningful titles.
1004
1005 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
1006 Classification method name from GetProperties to GetClassData.
1007
1008 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
1009 instead of accessing now non-existent class variables.
1010
1011 2003-02-24 Bernhard Herzog <[email protected]>
1012
1013 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
1014 unneeded Shape() call. Rendering is substantially faster without
1015 it and it avoids some problems with broken shape files.
1016
1017 2003-02-20 Frank Koormann <[email protected]>
1018
1019 Force minimal size of identify and label dialogs. The autosizing
1020 looked too ugly.
1021
1022 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
1023 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
1024 Set size of listctrl.
1025 * Thuban/UI/identifyview.py (IdentifyView.__init__):
1026 Set size of dialog.
1027
1028 2003-02-19 Jonathan Coles <[email protected]>
1029
1030 * test/test_classification.py, test/test_layer.py,
1031 test/test_load.py, test/test_map.py, test/test_session.py:
1032 Updated the tests to use the new functions that are in the
1033 respective classes.
1034
1035 * Thuban/Model/classification.py (Classification):
1036 Uses the new ClassData* classes. Modification messages are
1037 passed up to the parent layer (if it exists).
1038 (ClassData): New class to encapsulate the common data in each
1039 classification property.
1040 (ClassDataDefault): Represents the Default class. data.
1041 (ClassDataPoint): Represents a single class. data point
1042 (ClassDataRange): Represents a class. range
1043 (ClassDataMap): Represents a class. map (unused).
1044
1045 * Thuban/Model/color.py: Added Color.None to represent something
1046 with no color. Color.Black represents the color black.
1047 (NoColor): Helper class derived from Color to represent something
1048 with no color.
1049
1050 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
1051 stroke_width attributes. Made the 'classification' attribute private.
1052 New methods for setting/getting the classification.
1053
1054 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
1055 to get the classifcation and use the new ClassData* classes to
1056 hold the classification data. Use Str2Num to convert numbers
1057 properly.
1058
1059 * Thuban/Model/save.py (Saver): Use new Color and Classification
1060 methods
1061
1062 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
1063 custom grid.
1064 (ClassTable): Support for editing Values and Labels and for
1065 changing what type (point or range) of data is stored in each
1066 property based on how the user enters the data.
1067 (Classifier): Support for saving the new classifications and
1068 launching the dialog to edit a property.
1069 (SelectPropertiesDialog): New class for editing the visual
1070 properties of a classification (stroke color, width, and fill color)
1071 (ClassPreviewer): Took the Draw method from ClassRenderer and
1072 made most of it into this new class. Intend to use this class in
1073 the SelectPropertiesDialog for previewing changes.
1074
1075 * Thuban/UI/renderer.py: Use new Color and Classification methods.
1076
1077 * Thuban/UI/tree.py: Formatting changes.
1078
1079 * Doc/thuban.dtd: Add 'label' element
1080
1081 * Thuban/common.py: New. Contains common routines used throughout
1082 the code.
1083 (Str2Num): Takes a string and converts it to the "best" type of
1084 number.
1085
1086 2003-02-14 Bernhard Herzog <[email protected]>
1087
1088 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
1089 dragging flag is always set to 0 even when the tool implementation
1090 raises an exception
1091
1092 2003-02-11 Bernhard Herzog <[email protected]>
1093
1094 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
1095 method to create a splash screen.
1096 (ThubanApplication.ShowMainWindow): New. Show the main window.
1097 Needed so the splash screen can display the mainwindow
1098 (ThubanApplication.OnInit): Call the
1099 new splash_screen method to determine whether the application
1100 should display a splash screen. If it displays a splash screen do
1101 not immediately show the main window.
1102
1103 2003-02-11 Jonathan Coles <[email protected]>
1104
1105 * Thuban/Model/classification.py: Added import line to fix
1106 feature conflicts between running on python2.2 and python2.1.
1107
1108 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
1109 onto the clinfo parameter, so removed the deepcopy().
1110
1111 2003-02-10 Jonathan Coles <[email protected]>
1112
1113 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
1114 Added element_open variable to track opening and closing of tags
1115 so that tags that don't span more than one line are closed with
1116 /> instead of </tag_name>. Use the GetDefault*() methods of
1117 the Classification class.
1118
1119 * Thuban/Model/classification.py (Classificaton): Added set and
1120 get methods for the default data. The class also takes a layer
1121 reference so that modification messages can be sent. Fixed the
1122 methods to use the new ClassData class.
1123 (ClassData): New class to encapsulate the classification data
1124
1125 * Thuban/Model/layer.py (Layer): Remove the
1126 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
1127 SetDefault*() methods on the layer's classification object.
1128 (Layer.__init__): Use the new SetDefault*() methods in the
1129 Classification class.
1130
1131 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
1132 object instead of a dictionary.
1133
1134 * Thuban/UI/classifier.py (ClassRenderer): New class to
1135 draw the classifications in the dialog box's table.
1136 (Classifier): Modified to use the ClassRenderer class.
1137
1138 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
1139 methods of the Classification class.
1140
1141 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
1142 of the ClassData class.
1143
1144 * test/test_classification.py, test/test_layer.py,
1145 test/test_map.py, test/test_session.py: Fix the tests to work
1146 with the above code changes.
1147
1148 2003-02-03 Jonathan Coles <[email protected]>
1149
1150 * Thuban/Model/classification.py (Classification): Added getNull()
1151 to return the NullData reference
1152
1153 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
1154 Layer.SetStrokeWidth): Modified these functions to change the
1155 null data in the classification rather than keep these values
1156 directly in the Layer class. Menu options to change these values
1157 work again.
1158
1159 2003-01-28 Jonathan Coles <[email protected]>
1160
1161 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
1162 Fixed crashing problem on some systems. Dialog box shows
1163 classification data.
1164
1165 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
1166 Colors in the tree view.
1167
1168 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
1169 the tree info for classifications. Commented out unnecessary lines.
1170
1171 * Thuban/Model/classification.py (Classification.TreeInfo): New
1172 function to add information about the classification into the
1173 tree view.
1174
1175 2003-01-27 Jan-Oliver Wagner <[email protected]>
1176
1177 * Thuban/__init__.py (_): New.
1178
1179 * Thuban/Model/classification.py, Thuban/Model/extension.py,
1180 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
1181 Thuban/Model/session.py, Thuban/UI/application.py,
1182 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
1183 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
1184 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
1185 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
1186 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
1187
1188 2003-01-27 Jonathan Coles <[email protected]>
1189
1190 * Thuban/Model/layer.py: Classification initialization calls.
1191
1192 * Thuban/Model/classification.py: Created class to encapsulate
1193 a layer classification. Supports specific data points and
1194 ranges.
1195
1196 * Thuban/Model/load.py: Added support for loading classification
1197 information.
1198
1199 * Thuban/Model/save.py: Added support for saving classification
1200 information.
1201
1202 * Thuban/UI/classifier.py: Initial class for a dialog box for
1203 specifying classification information.
1204
1205 * Thuban/UI/mainwindows.py: Support for opening the classifier
1206 dialog.
1207
1208 * Thuban/UI/renderer.py: Support for drawing a layer with the
1209 classification information.
1210
1211 * Data/iceland_sample_class.thuban: iceland_sample with
1212 classification data.
1213
1214 * test/test_classification: Tests for the Classification class.
1215
1216 2002-12-09 Bernhard Herzog <[email protected]>
1217
1218 * test/test_command.py: New. Tests for the command classes.
1219
1220 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
1221 (Command.IsTool): New method to distinguish between command
1222 switching tools and other commands.
1223
1224 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
1225 the tool to avoid direct assignments to instance variables
1226 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
1227 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
1228 change the tool
1229
1230 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
1231 active tool's command turns insensitive, disable the tool.
1232 (_tool_command): Use the new ToolCommand class
1233
1234 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
1235 SelectTool method to change the tool
1236 (iconfile): Use the ToolCommand class
1237
1238 2002-12-03 Bernhard Herzog <[email protected]>
1239
1240 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
1241 the case of selected items that are not children of Layers or Maps
1242 properly. Previously this bug would trigger an assertion in
1243 wxWindows.
1244
1245 2002-11-06 Frank Koormann <[email protected]>
1246
1247 * Thuban/UI/mainwindow.py: Altered the order of tools in the
1248 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
1249 Full Extent).
1250
1251 2002-10-23 Bernhard Herzog <[email protected]>
1252
1253 * setup.py (setup call): version now 0.1.3
1254
1255 * MANIFEST.in: Add the files in test/
1256
1257 * test/README: Add note about tests requiring the iceland data
1258
1259 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
1260 copyright notice.
1261
1262 2002-10-18 Bernhard Herzog <[email protected]>
1263
1264 * test/test_map.py
1265 (TestMapWithContents.test_projected_bounding_box): Use an explicit
1266 epsilon.
1267
1268 * test/support.py (FloatComparisonMixin.assertFloatEqual)
1269 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
1270 message if the assertion fails and don't return the return value
1271 of self.assert_. In assertFloatSeqEqual the return meant that not
1272 all items of the sequence were compared.
1273
1274 2002-09-20 Bernhard Herzog <[email protected]>
1275
1276 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
1277
1278 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
1279
1280 * test/test_map.py (TestMapWithContents.test_tree_info): Create
1281 the string with the bounding box on the fly because of platform
1282 differences in the way %g is handled.
1283
1284 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
1285 DBFfile too because Thuban layers can't yet cope missing DBF
1286 files.
1287
1288 2002-09-20 Bernhard Herzog <[email protected]>
1289
1290 * test/test_menu.py: Use initthuban instead of
1291 add_thuban_dir_to_path to initialize Thuban.
1292
1293 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
1294 Mixin class for float comparisons
1295 (SubscriberMixin): New. Mixin class to test messages sent through
1296 the Connector class
1297
1298 * test/README: Fix a typo and add the -v flag to the command for
1299 individual tests
1300
1301 * test/test_session.py: New. Test cases for Thuban.Model.session
1302
1303 * test/test_proj.py: New. Test cases for Thuban.Model.proj
1304
1305 * test/test_map.py: New. Test cases for Thuban.Model.map
1306
1307 * test/test_layer.py: New. Test cases for Thuban.Model.layer
1308
1309 * test/test_label.py: New. Test cases for Thuban.Model.label
1310
1311 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
1312
1313 * test/test_color.py: New. Test cases for Thuban.Model.color
1314
1315 * test/test_base.py: New. Test cases for Thuban.Model.base
1316
1317 2002-09-13 Bernhard Herzog <[email protected]>
1318
1319 * Thuban/Model/session.py (Session.forwarded_channels): Forward
1320 the CHANGED channel too.
1321
1322 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
1323 CHANGED channel too.
1324 (Map.__init__): Call the Modifiable constructor as well.
1325
1326 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
1327 event if the modified flag changes.
1328 (Modifiable.changed): Tweak the doc-string.
1329
1330 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
1331 (MainWindow.set_position_text): Put the code that puts the text
1332 with the mouse position into the status bar into the new method
1333 set_position_text so that it can overwritten in derived classes.
1334
1335 2002-09-12 Bernhard Herzog <[email protected]>
1336
1337 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
1338 message box on the main window.
1339
1340 2002-09-11 Bernhard Herzog <[email protected]>
1341
1342 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
1343 the 'E' because it's less likely to interfere with other menu
1344 entries.
1345 (MainWindow.build_menu): remove an incorrect comment.
1346
1347 2002-09-10 Bernhard Herzog <[email protected]>
1348
1349 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
1350 (_tool_command): Add sensitive parameter
1351 (_has_visible_map): Sensitivity callback to tools and other
1352 commands that require a visible map. Use it in map_zoom_in_tool,
1353 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
1354 and map_full_extent
1355
1356 2002-09-06 Bernhard Herzog <[email protected]>
1357
1358 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
1359 VIEW_POSITION
1360
1361 2002-09-04 Frank Koormann <[email protected]>
1362
1363 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
1364
1365 2002-09-02 Bernhard Herzog <[email protected]>
1366
1367 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
1368 wxWindows already and our implementation doesn't work correctly
1369 with wxGTK 2.3:
1370 (MapCanvas.__init__): Remove the instance variable
1371 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
1372 be drawin
1373 (MapCanvas.OnIdle): Removed.
1374
1375 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
1376 a parameter to determine the size of the rectangle.
1377 (MapCanvas.find_shape_at): Create the box around the point on a
1378 layer by layer basis and make the size depend on the shape type.
1379 This solves a problem with the selection of point shapes at the
1380 border of the layer's bounding box
1381
1382 2002-08-30 Bernhard Herzog <[email protected]>
1383
1384 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
1385 for the sensitivity of remove layer.
1386 (_can_remove_layer): New. Sensitivity callback for remove layer
1387 (Command layer_remove): Use _can_remove_layer
1388
1389 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
1390 determine whether a given layer can be deleted.
1391
1392 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
1393 (MapCanvas.do_redraw): Get rid of the unused update_region
1394 instance variable
1395
1396 * Thuban/UI/view.py: Add/update some doc-strings.
1397
1398 * test/: new subdirectory with a bunch of unit tests.
1399
1400 * test/README, test/test_table.py, test/test_save.py,
1401 test/test_menu.py, test/test_load.py: Initial set of tests and
1402 brief instructions on how to run them
1403
1404 2002-08-29 Bernhard Herzog <[email protected]>
1405
1406 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
1407 arcs with multiple parts.
1408
1409 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
1410 Handle degenrate rectangles.
1411
1412 * Thuban/Model/table.py: Make writing records work correctly:
1413 (Table.__init__): Keep track of whether the DBF is open for
1414 writing
1415 (Table.write_record): Open the DBF file for writing when necessary
1416
1417 2002-08-27 Bernhard Herzog <[email protected]>
1418
1419 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
1420 dbf files only for reading by default. Use a new writable dbf
1421 object for writing.
1422
1423 2002-08-26 Bernhard Herzog <[email protected]>
1424
1425 * Thuban/UI/mainwindow.py: Refactor the context creation:
1426 (MainWindow.Context): New method to return a context
1427 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
1428 new method
1429
1430 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
1431 layer table specific code from TableGrid into LayerTableGrid
1432 (TableFrame, LayerTableFrame): Split the layer table specific code
1433 from TableFrame into LayerTableFrame
1434 (LayerTableGrid.select_shape): Remove a debug print
1435
1436 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
1437 LayerTableFrame
1438
1439 2002-08-23 Bernhard Herzog <[email protected]>
1440
1441 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
1442 absolute filename.
1443
1444 2002-08-22 Bernhard Herzog <[email protected]>
1445
1446 * Thuban/Model/table.py (Table.write_record): New method to write
1447 records.
1448 (Table.__init__): Open the DBF file for writing too.
1449
1450 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
1451 into the underlying table.
1452
1453 * extensions/shapelib/shapefil.h (DBFCommit),
1454 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
1455 commit any changes made to the DBF file.
1456
1457 * Thuban/UI/mainwindow.py (make_check_current_tool)
1458 (_tool_command): Put the code that generates the "checked"
1459 callback into a separate function so that we can reuse it
1460 elsewhere
1461
1462 * Thuban/Model/save.py (Saver): New class to handle serializing a
1463 session into an XML file. The main reason to introduce a class is
1464 that applications built on Thuban can derive from it so that they
1465 can save additional information in a session file.
1466 (save_session): Delegate almost all the work to the Saver class.
1467 Rename the filename argument to file because it may be a file like
1468 object now.
1469
1470 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
1471 code. Remove the little test code which would be executed when the
1472 module is run as a script which didn't work anymore since it can't
1473 import the other Thuban modules.
1474 (ProcessSession, load_session): Refactor the ProcessSession to
1475 have one method for each element start and end tag so that derived
1476 classes can easily override the processing of individual tags.
1477 Also, always parse with namespaces enabled because applications
1478 built on top of Thuban will likely use namespaces if they extend
1479 the session file format.
1480
1481 2002-08-21 Bernhard Herzog <[email protected]>
1482
1483 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
1484 because thubaninit_contents will do it for us.
1485
1486 2002-08-16 Jan-Oliver Wagner <[email protected]>
1487
1488 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
1489 tree window already open
1490
1491 2002-08-15 Bernhard Herzog <[email protected]>
1492
1493 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
1494 with self.
1495
1496 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
1497 when we have actually captured it.
1498
1499 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
1500 shapefile and destroy the table.
1501
1502 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
1503
1504 2002-08-14 Bernhard Herzog <[email protected]>
1505
1506 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
1507 instance variable columns
1508 (RecordTable.GetTypeName): row and col may be negative in some
1509 cases.
1510
1511 * setup.py (InstallLocal.initialize_options)
1512 (InstallLocal.finalize_options, InstallLocal.user_options): New
1513 option create-init-file to build a thubaninit.py when running
1514 install_local
1515 (InstallLocal.run): Create the thubaninit.py module when requested
1516 (thubaninit_contents): Split the template into several parts and
1517 create a new function thubaninit_contents that creates the
1518 contents of a thubaninit module.
1519 (ThubanInstall.run): Use the new function to create the thubaninit
1520 module.
1521
1522 2002-07-30 Bernhard Herzog <[email protected]>
1523
1524 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
1525 cleanup.
1526 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
1527
1528 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
1529 direct base class' Destroy method.
1530
1531 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
1532 layers.
1533 (Map.Destroy): Destroy the label_layer as well and call the
1534 inherited Desatroymethod first so that no more messages are
1535 issued.
1536 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
1537 message if the stacking order actually has changed. Add
1538 doc-strings.
1539 (Map.BoundingBox): Correct the doc-string.
1540 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
1541 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
1542
1543 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
1544 all labels.
1545
1546 2002-07-29 Bernhard Herzog <[email protected]>
1547
1548 * Thuban/Model/map.py (Map.subscribe_layer_channels)
1549 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
1550 to a layer's channels into separate methods.
1551 (Map.RemoveLayer, Map.AddLayer): Call the new methods
1552 (Map.Destroy): Unsubscribe from a layer's channels before
1553 destroying it.
1554
1555 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
1556 selected_layer parameter to searched_layer which is the layer to
1557 search in.
1558 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
1559 search to that layer. Return the selected layer and shape.
1560
1561 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
1562 typo
1563
1564 2002-07-24 Bernhard Herzog <[email protected]>
1565
1566 * Thuban/UI/application.py (ThubanApplication.create_session):
1567 Extend the doc string.
1568 (ThubanApplication.subscribe_session)
1569 (ThubanApplication.unsubscribe_session): New methods to
1570 subscribe/unsubscribe to/from session channels.
1571 (ThubanApplication.SetSession): Call the new methods here.
1572 (ThubanApplication.maps_changed, ThubanApplication.set_map):
1573 Renamed set_map to maps_changed. Its now a subscriber for
1574 MAPS_CHANGED.
1575
1576 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
1577 x-coordinate in case of simple clicks
1578
1579 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
1580 don't pass it as a parameter
1581
1582 * Thuban/Model/session.py (Session.RemoveMap): New
1583
1584 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
1585 window size into a parameter.
1586
1587 2002-07-23 Bernhard Herzog <[email protected]>
1588
1589 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1590 just commands.
1591
1592 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
1593 parameter list a bit to allow setting the window title and the
1594 initial message in the status bar. Update the callers.
1595
1596 * Thuban/UI/application.py (ThubanApplication.OnInit)
1597 (ThubanApplication.CreateMainWindow): Put the mainwindow
1598 instantiation into a separate method so that it can be overridden
1599 by a subclass.
1600
1601 2002-07-19 Bernhard Herzog <[email protected]>
1602
1603 * Thuban/Model/session.py: Issue a CHANGED message every time
1604 another changed message is issued to make it easier to get
1605 notified of changes.
1606 (Session): Update the doc string
1607 (Session.forward): Issue changed-events as CHANGED as well.
1608 (Session.changed): Overwrite the inherited version to issue
1609 CHANGED events as well.
1610
1611 * Thuban/UI/tree.py: We can now simply subscribe to the session's
1612 CHANGED channel to be informed of changes.
1613 (SessionTreeCtrl.session_channels): Not needed any longer.
1614 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1615 Only have to (un)subscribe CHANGED
1616
1617 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
1618
1619 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
1620 for the wxPython locale bug to __init__.py so that it's
1621 automatically executed by anybody using UI code from Thuban.
1622
1623 2002-07-18 Bernhard Herzog <[email protected]>
1624
1625 * Thuban/UI/main.py (main): app no longer needs to be global
1626
1627 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
1628 as parameter and store it in an instance variable
1629 (MainWindow.invoke_command, MainWindow.update_command_ui)
1630 (MainWindow.save_modified_session, MainWindow.NewSession)
1631 (MainWindow.OpenSession, MainWindow.SaveSession)
1632 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
1633 application object.
1634
1635 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
1636 the main window with self.
1637
1638 * Thuban/UI/context.py: New module with the context class
1639
1640 * Thuban/UI/command.py (Command): Update doc string.
1641
1642 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
1643 MainWindow.update_command_ui): Pass an instance of the context
1644 class to the command's methods
1645 (check_current_tool, call_method): Handle the new context
1646 implementation
1647
1648 * Examples/simple_extensions/simple_tool.py (simple_tool,
1649 check_simple_tool): Handle the new context implementation
1650
1651 * Examples/simple_extensions/simple_command.py (simple_command):
1652 Handle the new context implementation. Update the comments about
1653 the context.
1654
1655 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
1656 doc-string
1657 (ThubanApplication.Session): New method to return the session
1658 object
1659
1660 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
1661 interactor's selected_layer may not be a layer of the current
1662 session when the tree is updated while a new session is being set.
1663
1664 2002-07-17 Bernhard Herzog <[email protected]>
1665
1666 * Thuban/UI/tree.py (color_string): Removed. No longer used.
1667 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
1668 update_tree into update_tree and add_items. The tree now uses a
1669 more generic way to display the contents of the tree.
1670 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
1671
1672 * Thuban/Model/layer.py (Layer.TreeInfo),
1673 Thuban/Model/extension.py (Extension.TreeInfo),
1674 Thuban/Model/map.py (Map.TreeInfo),
1675 Thuban/Model/session.py (Session.TreeInfo):
1676 Add TreeInfo methods to implement the new tree view update scheme
1677
1678 2002-07-16 Bernhard Herzog <[email protected]>
1679
1680 * Thuban/UI/application.py: Don't use "import from" for the
1681 MainWindow. It can't always be resolved.
1682 (ThubanApplication.OnInit): change reference to MainWindow
1683 accordingly.
1684
1685 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
1686 completely
1687
1688 2002-07-10 Bernhard Herzog <[email protected]>
1689
1690 * setup.py (create_init_module): New configurable variable whose
1691 default depends on the platform we're running on.
1692 (ThubanInstall.initialize_options): Initialize
1693 self.create_init_module from the global create_init_module
1694 (ThubanInstall.user_options): indictate that the options
1695 create-init-module and init-module-dir have arguments.
1696
1697 * setup.py: In the setup call change the version number to include
1698 cvs.
1699
1700 * MANIFEST.in: Add the files in Examples
1701
1702 2002-07-09 Bernhard Herzog <[email protected]>
1703
1704 * setup.py: In the setup call, use the thuban homepage as the
1705 value of the url parameter.
1706
1707 * Examples: New subdirectory for examples.
1708
1709 * Examples/simple_extensions/simple_tool.xpm,
1710 Examples/simple_extensions/simple_tool.py,
1711 Examples/simple_extensions/simple_command.py,
1712 Examples/simple_extensions/README: Simple examples showing how to
1713 add new commands and tools.
1714
1715 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
1716 bdist_rpm that we also have an install script.
1717 (bdist_inno): Add 2002 to the copyright notice.
1718
1719 * setup.py: Create a file in python's site-packages directory to
1720 make installation of Thuban as a library easier.
1721 (ThubanInstall.user_options): Add two new options,
1722 create-init-module and init-module-dir
1723 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
1724 filenames for installation in the default directories.
1725 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
1726 the inherited methods to capture some filenames before they're
1727 transformed too much by distutils.
1728 (ThubanInstall.run): Create the init module if requested.
1729 (ThubanInstall.thuban_init_filename): New method to return the
1730 full name of the init module.
1731 (ThubanInstall.get_outputs): Append the filename of the init
1732 module.
1733
1734 2002-07-08 Bernhard Herzog <[email protected]>
1735
1736 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
1737 handle the prefix properly which means that the default for the
1738 installation prefix should be /usr for RPMs and /usr/local when
1739 doing a normal source install.
1740 (bdist_rpm_install_script): Script to override the default install
1741 commands in the specfile generated by the bdist_rpm command.
1742 (thuban_bdist_rpm.user_options): Add a prefix option
1743 (thuban_bdist_rpm.initialize_options): Init the prefix option.
1744 Create the script files for the spec files as empty files here
1745 (thuban_bdist_rpm._make_spec_file): Override the inherited method
1746 to fill the script files with content.
1747
1748 * Thuban/Model/save.py (relative_filename): Wrapper around
1749 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
1750 argument. save_session now automatically uses this version,
1751 solving a problem when saving to a relative filename.
1752
1753 * setup.py: In the setup call, make sure that the library
1754 directories are under $prefix/lib not directly under $prefix.
1755
1756 2002-06-20 Jan-Oliver Wagner <[email protected]>
1757
1758 * Thuban/Model/extension.py: new module to handle extension objects.
1759 * Thuban/Model/messages.py: new messages for extensions.
1760 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
1761 Session.AddExtension): new for handling extensions.
1762 Also some other minor changes to round up extension handling.
1763 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
1764 of Extension titles and title and names of its objects.
1765
1766 2002-05-29 Bernhard Herzog <[email protected]>
1767
1768 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
1769 the events for a command.
1770 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
1771 Call bind_command_events to bind the events. add_toolbar_command
1772 can now bind events too so that it's possible to have commands
1773 that are only available through the toolbar.
1774 (MainWindow.init_ids): New instance variable events_bound to keep
1775 track of for which commands events have been bound.
1776
1777 2002-05-28 Bernhard Herzog <[email protected]>
1778
1779 * Thuban/UI/menu.py: New module to build and manage menus.
1780
1781 * Thuban/UI/mainwindow.py: Remove some unused imports.
1782 (MainWindow.__init__, main_menu): move the definition of the main
1783 menu from __init__ to the Menu instance main_menu.
1784 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
1785 build the menu bar and sub-menus from a menu description.
1786
1787 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
1788 startup file
1789 (ThubanApplication.read_startup_files): New method to run
1790 ~/.thuban/thubanstart.py
1791
1792 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
1793 Move the toolbar definition to the Menu instance main_toolbar.
1794 (MainWindow.build_toolbar): New method to build the toolbar
1795 similar to the build_menu methods
1796
1797 2002-05-23 Bernhard Herzog <[email protected]>
1798
1799 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
1800 layer_outline_color. Fix it in the definition of the command too.
1801
1802 * Thuban/UI/command.py (Command): Fix typo in doc string
1803
1804 2002-05-22 Bernhard Herzog <[email protected]>
1805
1806 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
1807 in the docstring
1808
1809 2002-05-15 Bernhard Herzog <[email protected]>
1810
1811 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
1812 when the shapefile is empty.
1813 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
1814 now return None for empty shapefiles. Update doc-strings.
1815
1816 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
1817 the layer's bbox being None.
1818
1819 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
1820 layer's bbox being None.
1821
1822 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
1823 necessary.
1824 (MapCanvas.__init__): New instance variables, last_selected_layer
1825 and last_selected_shape to determine how the selection has
1826 changed.
1827
1828 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
1829 AutoSizeColumns because it will cause a traversal of the entire
1830 table which for large .dbf files will take a very long time.
1831
1832 2002-05-14 Bernhard Herzog <[email protected]>
1833
1834 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
1835 maximum depth for the tree than shapelib does by default.
1836
1837 2002-05-10 Bernhard Herzog <[email protected]>
1838
1839 * setup.py (py_modules): The shptree modules doesn't have a
1840 wrapper, so don't include it in the py_modules
1841
1842 2002-05-08 Bernhard Herzog <[email protected]>
1843
1844 * extensions/shapelib/shptree.c (compare_ints): Make arguments
1845 const void * as in the qsort prototype
1846 (SHPTreeFindLikelyShapes): Remove some unused variables.
1847
1848 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
1849 maintains to redraw the window during a drag.
1850 (MapCanvas.unprojected_rect_around_point): New method to determine
1851 a small region around a point for hit-testing.
1852 (MapCanvas.find_shape_at): Only test the shapes in a small region
1853 around the point.
1854
1855 * setup.py: Increment the version to 0.1.2
1856
1857 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
1858 debug print and set session to None after unsubscribing
1859
1860 2002-05-07 Bernhard Herzog <[email protected]>
1861
1862 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
1863 the file to have a .thuban extension.
1864
1865 * Thuban/UI/tree.py (session_channels): New class constant with
1866 all the session channels to subscribe to to update the tree
1867 (SessionTreeCtrl.session_changed): Remember the session so that we
1868 can unsubscribe properly. Use the new class constant to
1869 unsubscribe from the old session and subscribe to the new one.
1870 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
1871 subscriptions of the SessionTreeCtrl.
1872 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
1873
1874 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
1875 Session Tree" command to the file menu.
1876
1877 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
1878 as update_region to the renderer.
1879
1880 * Thuban/UI/renderer.py
1881 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
1882 update box is now directly a tuple, not a wxRect anymore.
1883
1884 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
1885 prints.
1886
1887 2002-05-07 Bernhard Herzog <[email protected]>
1888
1889 * setup.py: Add the shptree extension module. See
1890 extensions/pyshapelib/ChangeLog for more details.
1891
1892 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
1893 extensions/shapelib/dbfopen.c: Really update to the versions of
1894 shapelib 1.2.9. For some reason it wasn't really done on
1895 2002-04-11.
1896
1897 * extensions/shapelib/shptree.c: Modified version of shptree.c of
1898 shapelib 1.2.9. The only real difference is the use of qsort
1899 instead of a bubble sort implementation
1900
1901 * Thuban/Model/layer.py (Layer.__init__): New instance variable
1902 shapetree to hold the shapelib quadtree for the shapefile
1903 (Layer.open_shapefile): Create the quad tree.
1904 (Layer.ShapesInRegion): New method to return the ids of shapes in
1905 a given region using the quad tree.
1906
1907 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
1908 comment
1909 (draw_polygon_shape): Accept both arcs and polygons.
1910 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
1911 the api.
1912
1913 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
1914 return the shape ids to be rendered in a given layer.
1915 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
1916 ids. Use draw_polygon_shape to draw arc shapes as well.
1917 (ScreenRenderer.RenderMap): New parameter for the rectangle that
1918 has to be updated
1919 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
1920 calling it's ShapesInRegion method.
1921
1922 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
1923 update_region for the update region.
1924 (MapCanvas.OnPaint): Maintain the update region
1925 (MapCanvas.do_redraw): Pass the bounding box of the update_region
1926 to the renderer when drawing the bitmap. Reset the update_region.
1927
1928 2002-05-03 Bernhard Herzog <[email protected]>
1929
1930 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
1931 MainWindow.OpenSession): Change the file extension of the session
1932 files to .thuban
1933
1934 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
1935 Move the map channels to be forwarded by the session into the
1936 class constant with forwarded_channels. Also add
1937 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
1938 forwarded_channels
1939
1940 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
1941 typo and some rewording).
1942
1943 2002-05-02 Bernhard Herzog <[email protected]>
1944
1945 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
1946 around to speed up most redraws:
1947 (MapCanvas.__init__): New instance variable bitmap which holds the
1948 bitmap
1949 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
1950 self.bitmap to draw.
1951 (MapCanvas.full_redraw): New method to force a full redraw
1952 including the bitmap
1953 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
1954 make sure the bitmap is redrawn.
1955 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
1956 MapCanvas.shape_selected): Call full_redraw instead of readraw to
1957 make sure the bitmap is redrawn.
1958 (MapCanvas.OnSize): New method to handle size events so that the
1959 bitmap can be redrawn.
1960
1961 2002-04-29 Bernhard Herzog <[email protected]>
1962
1963 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1964 canvas' VIEW_POSITION event
1965 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
1966 Update the text in the status-bar accordingly.
1967
1968 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
1969 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
1970 called.
1971 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
1972 current_position
1973 (MapCanvas.set_current_position): New method to set
1974 current_position. Issue a VIEW_POSITION event
1975 (MapCanvas.CurrentPosition): New public method to return the value
1976 of current_position. Should be called when the VIEW_POSITION event
1977 is processed.
1978 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
1979 Update the position.
1980 (MapCanvas.OnLeaveWindow): Set the position to None.
1981
1982 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1983 position in the statusbar
1984
1985 2002-04-26 Frank Koormann <[email protected]>
1986
1987 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1988
1989 2002-04-24 Frank Koormann <[email protected]>
1990
1991 * Resources/Bitmaps/identify.xpm: shadow added
1992
1993 * Resources/Bitmaps/fullextent.xpm: new
1994
1995 2002-04-22 Jan-Oliver Wagner <[email protected]>
1996
1997 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1998 box
1999
2000 2002-04-21 Jan-Oliver Wagner <[email protected]>
2001
2002 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
2003
2004 * Thuban/UI/tree.py (update_tree): added added map extent
2005
2006 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
2007 icon; added map_full_extend as tool
2008
2009 2002-04-19 Jan-Oliver Wagner <[email protected]>
2010
2011 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
2012 saving _new_ sessions
2013
2014 * Thuban/Model/session.py (create_empty_session): new session
2015 don't have a filename (set to None)
2016
2017 * Thuban/UI/tree.py (update_tree): added filename and modified flag
2018
2019 * Thuban/Model/load.py (ProcessSession): convert projection
2020 parameters from unicode to regular string
2021
2022 * Data/iceland_sample.session: Added UTM Zone 26 projection.
2023
2024 2002-04-11 Bernhard Herzog <[email protected]>
2025
2026 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
2027 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
2028 1.2.9
2029
2030 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
2031 the pyshapelib directoy into the list of include dirs, so that
2032 pyshapelib_api.h can be found.
2033
2034 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
2035 holds the pyshapelib C-API
2036 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
2037 pyshapelib_api to access the shapelib functions.
2038 (initwxproj): Import the c_api from the shapelib module and
2039 initialize pyshapelib_api.
2040
2041 2002-04-04 Bernhard Herzog <[email protected]>
2042
2043 * setup.py (thuban_bdist_rpm.initialize_options): Use
2044 initialize_options to create the scripts for the rpm.
2045
2046 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
2047
2048 2002-04-03 Bernhard Herzog <[email protected]>
2049
2050 * setup.py: Increment version to 0.1.1
2051
2052 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
2053 Layer" and "Remove Layer" commands from the layer menu to the map
2054 menu
2055
2056 2002-02-15 Bernhard Herzog <[email protected]>
2057
2058 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
2059 argument (python <= 1.5.2 erroneously accepted multiuple
2060 arguments)
2061
2062 2002-02-04 Bernhard Herzog <[email protected]>
2063
2064 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
2065 RecordGrid in the identifyview.
2066 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
2067 IdentifyListCtrl. The grid allows editing of the values.
2068
2069 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
2070 implementing a grid for a single row of a thuban table.
2071
2072 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
2073 layers by default. Easier to use than the previous default of only
2074 searching through the select layer which meant that if no layer
2075 was selected, you couldn't select a shape.
2076
2077 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
2078
2079 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
2080 stroke_width attribute
2081
2082 * Thuban/Model/save.py (save_session): Write the new stroke_width
2083 attribute
2084
2085 * Thuban/Model/load.py (ProcessSession.startElement): Read the
2086 stroke_width attribute
2087
2088 * Thuban/Model/layer.py (Layer.__init__): New parameter and
2089 instance variable stroke_width
2090 (Layer.SetStrokeWidth): Set the stroke_width.
2091
2092 2002-02-01 Bernhard Herzog <[email protected]>
2093
2094 * extensions/thuban/wxproj.cpp (project_points): Fix two
2095 off-by-one errors in the last loop that joins the various parts
2096 together.
2097
2098 2002-01-14 Bernhard Herzog <[email protected]>
2099
2100 * setup.py (data_dist.make_distribution): Fix some typos
2101
2102 2001-09-18 Bernhard Herzog <[email protected]>
2103
2104 * README: Slight tweaking in preparation for the 0.1 release
2105
2106 * setup.cfg: Add section for sdist to create both tgz and zip
2107 archives
2108
2109 * setup.py: increase version number to 0.1
2110 (data_dist): New command class for data distribution
2111
2112 2001-09-14 Bernhard Herzog <[email protected]>
2113
2114 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
2115 Handle the case of no layer (i.e. layer is None) properly.
2116
2117 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
2118 Set the initial selection of the combo boxes to reflect the
2119 projection we're starting with in a way that works on windows,
2120 too.
2121
2122 * Thuban/Lib/connector.py (Connector.print_connections): Print the
2123 puiblisher's ids in hex to make it easier to compare them to the
2124 standard repr of python methods
2125
2126 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
2127 messages
2128
2129 2001-09-13 Bernhard Herzog <[email protected]>
2130
2131 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
2132 deselect the layer if no layer is selected
2133
2134 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
2135 idle time when there actually is something to draw. If there's
2136 nothing to draw simply clear the window
2137 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
2138 (MapCanvas.SetMap): force a redraw in all cases because
2139 FitMapToWindow doesn't always do it.
2140 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
2141 specify the point to move into the center of the window
2142 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
2143 dragged, zoon in/out by a factor of 2
2144 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
2145 index, i.e. reversed drawing order) so that objects appearing to
2146 be in from of others are selected first. This is probably mostly
2147 relevant for point shapes where the symbols used may overlap
2148
2149 * Thuban/Model/session.py (create_empty_session): Unset the
2150 modified bit before returning it
2151
2152 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
2153 create_empty_session session to create the new, empty session.
2154
2155 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
2156 the tool bitmaps.
2157 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
2158 the code that asks whether the session should be saved into the
2159 new method save_modified_session.
2160 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
2161 method to save modified session here too.
2162
2163 2001-09-11 Bernhard Herzog <[email protected]>
2164
2165 * setup.py (InnoIconItem): fix typo
2166
2167 (thuban_bdist_inno.run):
2168 (bdist_inno.run): Move the decision not to create symlinks on
2169 non-nt platforms to thuban_bdist_inno and do it unconditinally
2170 since we never want to create the symlinks here
2171
2172 2001-09-10 Bernhard Herzog <[email protected]>
2173
2174 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
2175 identify view immediately
2176
2177 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
2178 and SelectableRecordListCtrl that implement the code shared by the
2179 identify view and the label dialog
2180
2181 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
2182 new class RecordListCtrl
2183
2184 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
2185 return value of GetValue is None instead of using it as a boolean
2186 directly so that Zero numbers are handled properly.
2187 (LabelListCtrl): Derive from the new class
2188 SelectableRecordListCtrl
2189
2190 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
2191 (Proj4Dialog.dialogLayout): Make the window resizable and set the
2192 size of the text control explicitly to make the sizers work on
2193 both Windows and X.
2194
2195 2001-09-07 Bernhard Herzog <[email protected]>
2196
2197 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
2198 that can limit the search to the currently selected layer.
2199 (MapCanvas.SelectShapeAt): Make sure that the currently selected
2200 layer stays selected even when no shape is found
2201 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
2202 height do nothing (avoids zero division errors)
2203
2204 2001-09-06 Bernhard Herzog <[email protected]>
2205
2206 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
2207 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
2208 convenient :-)
2209 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
2210 a new instvar layer_to_item to map layers to tree items
2211 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
2212 to match the current selection in the interactor
2213
2214 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
2215 (Interactor.HasSelectedLayer): New methods to query the current
2216 selection
2217
2218 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
2219 (MainWindow.has_selected_layer): Simply call the appropriate
2220 interactor method
2221
2222 * Thuban/UI/mainwindow.py (MainWindow.__init__):
2223 (MainWindow.LayerShowTable):
2224 (MainWindow.identify_view_on_demand): Store the interactor in an
2225 instvar and use that reference instead of going through main.app
2226
2227 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
2228 * Thuban/UI/application.py (ThubanApplication.OnInit):
2229 * Thuban/UI/main.py (main): Create the session tree view in main
2230 with the new mainwindow method ShowSessionTree and not directly
2231 the application's OnInit method
2232
2233 * Thuban/UI/tree.py (myTreeCtrlPanel):
2234 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
2235 TreeCtrl isntead of a panel. This affects most method since we now
2236 refer to self instead of self.tree
2237 (SessionTreeView): New class implementing a non-modal dialog
2238 showing the session tree.
2239
2240 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
2241 layer to the tableview dialog.
2242
2243 * Thuban/UI/tableview.py: Add some doc-strings
2244 (TableGrid):
2245 (TableGrid.OnRangeSelect):
2246 (TableGrid.OnSelectCell):
2247 (TableFrame.__init__):
2248 (TableFrame.row_selected):
2249 Selecting rows in the grid view now updates the selected shapes
2250 through the TableFrame. To achieve this we derive TableGrid from
2251 Publisher and introduce the message type ROW_SELECTED which the
2252 TableFrame subscribes to and which is issued by OnRangeSelect and
2253 OnSelectCell
2254
2255 (DataTable.SelectRow): Removed because it's no longer needed in
2256 the row/shape selection scheme
2257
2258 * Thuban/UI/dialogs.py: New file implementing common classes for
2259 dialogs
2260
2261 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
2262 the SELECTED_SHAPE message anymore. This is now handled by the
2263 parent.
2264 (TableGrid.select_shape): Only update the selection if the shape
2265 is not None.
2266 (TableFrame): Inherit from the new NonModalDialog class.
2267 (TableFrame.__init__, TableFrame.select_shape): Handle the
2268 SELECT_SHAPE message.
2269 (TableFrame.OnClose): Extend the inherited method to unsubscribe
2270 SELECT_SHAPE
2271
2272 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
2273 (MainWindow.add_dialog):
2274 (MainWindow.dialog_open):
2275 (MainWindow.remove_dialog):
2276 (MainWindow.get_open_dialog): New methods to maintain a dictionary
2277 of opened non-modal dialogs.
2278
2279 (MainWindow.__init__): Initialize the new non-modal dictionary
2280 management code
2281 (MainWindow.LayerShowTable): maintain separate dialogs for each
2282 table using the non-modal dialog management code to only open a
2283 view once for each table.
2284
2285 (MainWindow.IdentifyTool):
2286 (MainWindow.__init__):
2287 (MainWindow.identify_view_on_demand): Don't open the identify view
2288 in IdentifyTool anymore. This will be done automatically by the
2289 new method identify_view_on_demand which handles the
2290 SELECTED_SHAPE message so that the identify view will be opened on
2291 demand
2292
2293 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
2294 the interactor argument. The SELECTED_SHAPE message is now handled
2295 by the parent.
2296 (IdentifyView.__init__): Add the interactor argument so that we
2297 can handle the SELECTED_SHAPE message here
2298 (IdentifyView.selected_shape): New method to handle the
2299 SELECTED_SHAPE messages
2300
2301 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
2302 NonModalDialog class
2303 (IdentifyView.OnClose): Extend the inherited version to
2304 unsubscribe SELECT_SHAPE
2305
2306 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
2307
2308 2001-09-05 Bernhard Herzog <[email protected]>
2309
2310 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
2311
2312 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
2313 interactor to pass through to the MapCanvas
2314
2315 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
2316 argument to the MainWindow constructor to get rid of the ugly hack
2317 that made main.app available early just so that the mapcanvas
2318 could access the interactor object.
2319
2320 2001-09-04 Bernhard Herzog <[email protected]>
2321
2322 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
2323 that runs a modal message box
2324 (MainWindow.OnClose): Use the new method
2325 (MainWindow.RemoveLayer): Just do nothing in case no layer is
2326 selected. The command should be grayed out anyway, so there's no
2327 need to pop up a message box.
2328 (MainWindow.AddLayer): Pop up a message box with an error message
2329 if the shape file can't be opened
2330
2331 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
2332 immediately. This will cause an exception in case the file can't
2333 be opened and we can display an appropriate message.
2334
2335 * MANIFEST.in: Add extensions/pyprojection/LICENSE
2336
2337 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
2338 specific bdist_rpm command.
2339
2340 * Thuban/UI/main.py: Catch ImportError exceptions when importing
2341 the locale module because it may not be available on some
2342 installations.
2343
2344 * extensions/pyprojection/LICENSE: Copy of the license text in
2345 Projection.i. Having it in a separate file makes it easier to
2346 refer to license text in e.g. RPMs
2347
2348 2001-09-03 Bernhard Herzog <[email protected]>
2349
2350 * setup.py: use wx-config instead of wxgtk-config because it's
2351 more generic
2352
2353 * setup.py (ThubanInstall.get_outputs): Add the symlink in
2354 <prefix>/bin to the outputs
2355 (ThubanInstall.link_file): New method to link files. We need this
2356 because the standard copy_files refuses to link non-existing
2357 files.
2358 (ThubanInstall.run): Remove the leading install root from the
2359 script filename if an install root was specified and use the new
2360 link_file method
2361
2362 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
2363 the window when the first layer is added to the map.
2364
2365 * setup.py (ThubanInstall.run): Honor the build root (self.root)
2366 when linking thuban.py to <prefix>/bin
2367
2368 2001-08-31 Bernhard Herzog <[email protected]>
2369
2370 * setup.py: In the setup call, the install parameters shouldn't
2371 have trailing slashes because distutils on non-posix platforms
2372 doesn't like that. The same applies to other directories like
2373 "Resources/Bitmaps"
2374
2375 In the configuration section for nt, move the wxWindows directory
2376 optins into the part clearly marked as editable.
2377
2378 (InstallLocal.initialize_options):
2379 (InstallLocal.user_options): remove the currently unused debug
2380 flag
2381 (thuban_build_py.find_all_modules): Add this method so that it
2382 works for our case of having packages and modules in one
2383 distribution as well.
2384 (ThubanInstall.initialize_options):
2385 (ThubanInstall.finalize_options):
2386 (ThubanInstall.user_options):
2387 (ThubanInstall.boolean_options): Add new options, do-symlink and
2388 extra files. Since these are the first ThubanInstall specific
2389 options, override user_options and boolean_options
2390 (ThubanInstall.run): Honor the new do-symlink and extra-files
2391 options.
2392 (ThubanInstall.get_outputs): Add to override the base-class's
2393 version and add the extra-files to the outputs
2394 (bdist_inno): New class for windows distributions with Inno Setup
2395 (InnoIconItem): Helper class for bdist_inno
2396 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
2397 this together with the appropriate parameters, to the setup call.
2398
2399 * setup.cfg (bdist_inno): added new section for the inno setup
2400 installer
2401
2402 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
2403 changing_selection to avoid recursive selection events when
2404 modifying the selection in response to a selection event.
2405 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
2406 changing the tree's selection.
2407 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
2408 we're not being called indirectly from normalize_selection.
2409
2410 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
2411 event.Check only if the command is actuall checkable.
2412 (MainWindow.__init__): Call the toolbar's Realize method to make
2413 sure that the items are actually shown
2414
2415 2001-08-28 Bernhard Herzog <[email protected]>
2416
2417 * setup.py: Fix some doc strings
2418
2419 * ChangeLog: started
2420

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26