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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 776 - (show annotations)
Tue Apr 29 14:41:34 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 112433 byte(s)
updated ChangeLog with bug id.

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26