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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 767 - (show annotations)
Tue Apr 29 13:03:47 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 111543 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26