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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 788 - (show annotations)
Wed Apr 30 10:57:36 2003 UTC (21 years, 10 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 113521 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26