Changeset 897
- Timestamp:
- 05/24/06 03:54:25 (2 years ago)
- Files:
-
- trunk/gaphor/ChangeLog (modified) (1 diff)
- trunk/gaphor/TODO (modified) (4 diffs)
- trunk/gaphor/gaphor/UML/diagram.py (modified) (2 diffs)
- trunk/gaphor/gaphor/__init__.py (modified) (1 diff)
- trunk/gaphor/gaphor/diagram/association.py (modified) (2 diffs)
- trunk/gaphor/gaphor/diagram/feature.py (modified) (2 diffs)
- trunk/gaphor/gaphor/diagram/itemactions.py (modified) (57 diffs)
- trunk/gaphor/gaphor/diagram/itemtool.py (modified) (4 diffs)
- trunk/gaphor/gaphor/diagram/nameditem.py (modified) (2 diffs)
- trunk/gaphor/gaphor/diagram/placementtool.py (modified) (3 diffs)
- trunk/gaphor/gaphor/ui/diagramactions.py (modified) (7 diffs)
- trunk/gaphor/gaphor/ui/diagramtab.py (modified) (2 diffs)
- trunk/gaphor/gaphor/ui/mainactions.py (modified) (4 diffs)
- trunk/gaphor/gaphor/ui/mainwindow.py (modified) (2 diffs)
- trunk/gaphor/gaphor/undomanager.py (modified) (10 diffs)
- trunk/gaphor/run-gaphor.sh (modified) (1 diff)
- trunk/gaphor/setup.py (modified) (2 diffs)
- trunk/gaphor/utils/dist_mo.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/gaphor/ChangeLog
r893 r897 1 2006-05-23 arjan <arjan at yirdis dot nl> 2 3 * gaphor/undomanager.py: disconnected from diacanvas.UndoManager 4 * */*actions.py: use new undoable descriptior in stead of aspects 5 1 6 2006-05-18 arjan <arjan at yirdis dot nl> 2 7 * po/es.po: updated by Jordi Vilalta Prat. trunk/gaphor/TODO
r894 r897 20 20 As always, there is much to do... 21 21 22 - At this point we have three event systems: 23 1. GObject - used by GTK+, should be restricted to the GUI 24 2. Actions - used for (pseudo) menu actions (artifical actions are triggered 25 some times (e.g. to notify about changes in the Undo Manager) 26 works with string based notifiers. 27 3. Zope - fairly optimized, works with interfaces and objects for a 28 change. 29 30 GObject will stay as long as we use GTK+. Restrict it's influence to the GUI. 31 (to much management overhead) 32 Actions work fine, for menu actions. Gaphor specific and should work 33 with the GTK+ menu manager classes. 34 Zope classes are quite optimized. However, mainly provides the same 35 functionality as Actions, but not as fine grained. 36 22 37 - Check association removal when connected to a class. 23 38 24 39 - Fix namespace relations between Lifeline and Interaction and Message and 25 40 Interaction 41 42 - Allow to make Action objects, instead of defining classes. 43 Should use meta-classes for registration too (define __abstract__ or\something to prevent registration). 26 44 27 45 #- Store application state: … … 63 81 - Use default GTK+ menu classes, in stead of the home-brew one. 64 82 65 #- Use GTK+ 2.4 UIManager and ActionGroups (?): 83 - Use GTK+ 2.4 UIManager and ActionGroups (?): 84 * Reconsider since GTK+ 2.8 bindings are fairly better than the 2.4 bindings 66 85 . We have to keep the gaphor.misc.action module intact. 67 86 . As far as I can see, cross action updates, are not supported. … … 74 93 . The current structure is simple and quite Pythonic. It should be this way. 75 94 . Stuff like a recent-file box will be easier to create (I guess). 76 Conclusion: keep using the gaphor.misc.action code95 Previous conclusion: keep using the gaphor.misc.action code 77 96 78 97 #- Storing last open files or having a quick-list of most important … … 134 153 > nice in Gaphor 135 154 136 Lineup selected elements vertically, horizontally in context menu155 - Lineup selected elements vertically, horizontally in context menu 137 156 138 I also intend to "merge" lines (as is often used for generalizations: a line with one arrow, which splits into two lines, one for each subclass) 157 - I also intend to "merge" lines (as is often used for generalizations: a 158 line with one arrow, which splits into two lines, one for each subclass) 139 159 140 The text editing also needs a facelift.160 - The text editing also needs a facelift. 141 161 142 Alert a user when deleting the last reference to an object (Are you sure you want to remove all the selected elements from the model?) 162 #- Alert a user when deleting the last reference to an object (Are you 163 sure you want to remove all the selected elements from the model?) 164 trunk/gaphor/gaphor/UML/diagram.py
r505 r897 11 11 import diacanvas 12 12 from gaphor.misc import uniqueid 13 from gaphor.undomanager import get_undo_manager14 13 from uml2 import Namespace, PackageableElement 15 14 … … 26 25 self.__gobject_init__() 27 26 self._diagram = diagram 28 self.set_undo_manager(get_undo_manager())29 27 30 28 diagram = property(lambda d: d._diagram) trunk/gaphor/gaphor/__init__.py
r529 r897 7 7 8 8 # Check for GTK-2.0, since we need it anyway... 9 import pygtk10 pygtk.require('2.0')11 del pygtk9 #import pygtk 10 #pygtk.require('2.0') 11 #del pygtk 12 12 13 13 import misc.singleton trunk/gaphor/gaphor/diagram/association.py
r772 r897 19 19 20 20 from gaphor import resource, UML 21 from gaphor.undomanager import undoable 21 22 from gaphor.diagram.diagramitem import DiagramItem 22 23 from gaphor.diagram.relationship import RelationshipItem … … 876 877 pass 877 878 879 @undoable 878 880 def on_editable_editing_done(self, shape, new_text): 879 881 if shape in (self._name, self._mult): 880 882 if self.subject and (shape == self._name or new_text != ''): 881 self.canvas.get_undo_manager().begin_transaction()882 883 self.subject.parse(new_text) 883 self.canvas.get_undo_manager().commit_transaction()884 884 #self.set_text() 885 885 #log.info('editing done') trunk/gaphor/gaphor/diagram/feature.py
r772 r897 12 12 from diacanvas.geometry import distance_rectangle_point 13 13 from diagramitem import DiagramItem 14 from gaphor.undomanager import undoable 14 15 from gaphor.diagram import DiagramItemMeta 16 15 17 16 18 class FeatureItem(CanvasItem, CanvasEditable, DiagramItem): … … 57 59 self._expression.set_text(self.subject.render()) 58 60 61 @undoable 59 62 def do_set_property(self, pspec, value): 60 63 if pspec.name == 'expression': 61 64 if self.subject: 62 65 #self.preserve_property('expression') 63 self.canvas.get_undo_manager().begin_transaction()64 66 self.subject.parse(value) 65 self.canvas.get_undo_manager().commit_transaction()66 67 67 68 self._expression.set_text(self.subject.render()) trunk/gaphor/gaphor/diagram/itemactions.py
r772 r897 10 10 from gaphor import GaphorError, resource 11 11 from gaphor import UML 12 from gaphor.undomanager import UndoTransactionAspect, weave_method12 from gaphor.undomanager import undoable 13 13 from gaphor.misc.action import Action, CheckAction, RadioAction, ObjectAction 14 14 from gaphor.misc.action import register_action … … 126 126 self.active = item.subject and item.subject.isAbstract 127 127 128 @undoable 128 129 def execute(self): 129 130 item = get_parent_focus_item(self._window) … … 131 132 item.subject.isAbstract = self.active 132 133 133 weave_method(AbstractClassAction.execute, UndoTransactionAspect)134 134 register_action(AbstractClassAction, 'ItemFocus') 135 135 … … 154 154 self.active = item.subject and item.subject.isAbstract 155 155 156 @undoable 156 157 def execute(self): 157 158 item = self._window.get_current_diagram_view() \ … … 160 161 item.subject.isAbstract = self.active 161 162 162 weave_method(AbstractOperationAction.execute, UndoTransactionAspect)163 163 register_action(AbstractOperationAction, 'ItemFocus') 164 164 … … 185 185 self.sensitive = item.get_property('show-attributes') 186 186 187 @undoable 187 188 def execute(self): 188 189 view = self._window.get_current_diagram_view() … … 207 208 break 208 209 209 weave_method(CreateAttributeAction.execute, UndoTransactionAspect)210 210 register_action(CreateAttributeAction, 'ShowAttributes', 'ItemFocus') 211 211 … … 228 228 self.sensitive = item.get_property('show-operations') 229 229 230 @undoable 230 231 def execute(self): 231 232 view = self._window.get_current_diagram_view() … … 249 250 break 250 251 251 weave_method(CreateOperationAction.execute, UndoTransactionAspect)252 252 register_action(CreateOperationAction, 'ShowOperations', 'ItemFocus') 253 253 … … 258 258 self._window = window 259 259 260 @undoable 260 261 def execute(self): 261 262 #subject = get_parent_focus_item(self._window).subject … … 270 271 tooltip='Delete the selected attribute' 271 272 272 weave_method(DeleteAttributeAction.execute, UndoTransactionAspect)273 273 register_action(DeleteAttributeAction, 'ShowAttributes', 'CreateAttribute', 'ItemFocus') 274 274 … … 279 279 tooltip = 'Delete the selected operation' 280 280 281 weave_method(DeleteOperationAction.execute, UndoTransactionAspect)282 281 register_action(DeleteOperationAction, 'ShowOperations', 'CreateOperation', 'ItemFocus') 283 282 … … 300 299 self.active = item.get_property('show-attributes') 301 300 301 @undoable 302 302 def execute(self): 303 303 item = get_parent_focus_item(self._window) 304 304 item.set_property('show-attributes', self.active) 305 305 306 weave_method(DeleteOperationAction.execute, UndoTransactionAspect)307 306 register_action(ShowAttributesAction, 'ItemFocus') 308 307 … … 325 324 self.active = item.get_property('show-operations') 326 325 326 @undoable 327 327 def execute(self): 328 328 item = get_parent_focus_item(self._window) 329 329 item.set_property('show-operations', self.active) 330 330 331 weave_method(ShowOperationsAction.execute, UndoTransactionAspect)332 331 register_action(ShowOperationsAction, 'ItemFocus') 333 332 … … 359 358 tooltip='Add a segment to the line' 360 359 360 @undoable 361 361 def execute(self): 362 362 item, segment = self.get_item_and_segment() … … 364 364 item.set_property('add_segment', segment) 365 365 366 weave_method(AddSegmentAction.execute, UndoTransactionAspect)367 366 register_action(AddSegmentAction, 'ItemFocus') 368 367 … … 381 380 pass 382 381 382 @undoable 383 383 def execute(self): 384 384 item, segment = self.get_item_and_segment() … … 386 386 item.set_property('del_segment', segment) 387 387 388 weave_method(DeleteSegmentAction.execute, UndoTransactionAspect)389 388 register_action(DeleteSegmentAction, 'ItemFocus', 'AddSegment') 390 389 … … 406 405 pass 407 406 407 @undoable 408 408 def execute(self): 409 409 fi = get_parent_focus_item(self._window) … … 413 413 fi.set_property('orthogonal', self.active) 414 414 415 weave_method(OrthogonalAction.execute, UndoTransactionAspect)416 415 register_action(OrthogonalAction, 'ItemFocus', 'AddSegment', 'DeleteSegment') 417 416 … … 434 433 pass 435 434 435 @undoable 436 436 def execute(self): 437 437 fi = get_parent_focus_item(self._window) … … 439 439 fi.set_property('horizontal', self.active) 440 440 441 weave_method(OrthogonalAlignmentAction.execute, UndoTransactionAspect)442 441 register_action(OrthogonalAlignmentAction, 'ItemFocus', 'Orthogonal') 443 442 … … 463 462 pass 464 463 464 @undoable 465 465 def execute(self): 466 466 fi = get_parent_focus_item(self._window) … … 468 468 fi.set_property('show-direction', self.active) 469 469 470 weave_method(AssociationShowDirectionAction.execute, UndoTransactionAspect)471 470 register_action(AssociationShowDirectionAction, 'ItemFocus') 472 471 … … 480 479 self._window = window 481 480 481 @undoable 482 482 def execute(self): 483 483 fi = get_parent_focus_item(self._window) … … 485 485 fi.invert_direction() 486 486 487 weave_method(AssociationInvertDirectionAction.execute, UndoTransactionAspect)488 487 register_action(AssociationInvertDirectionAction, 'ItemFocus') 489 488 … … 507 506 pass 508 507 508 @undoable 509 509 def execute(self): 510 510 item = self.get_association_end() … … 512 512 assert isinstance(item.subject, UML.Property) 513 513 item.set_navigable(self.navigable) 514 515 weave_method(NavigableAction.execute, UndoTransactionAspect)516 514 517 515 … … 585 583 pass 586 584 585 @undoable 587 586 def execute(self): 588 587 if self.active: … … 591 590 subject.aggregation = self.aggregation 592 591 593 weave_method(AggregationAction.execute, UndoTransactionAspect)594 592 595 593 class HeadNoneAction(AggregationAction): … … 722 720 pass 723 721 722 @undoable 724 723 def execute(self): 725 724 if self.active: … … 728 727 #item.auto_dependency = False 729 728 self._window.get_action_pool().execute('AutoDependency', active=False) 730 731 weave_method(DependencyTypeAction.execute, UndoTransactionAspect)732 729 733 730 … … 784 781 self.active = item.auto_dependency 785 782 783 @undoable 786 784 def execute(self): 787 785 item = get_parent_focus_item(self._window) 788 786 item.auto_dependency = self.active 789 787 790 weave_method(AutoDependencyAction.execute, UndoTransactionAspect)791 788 register_action(AutoDependencyAction, 'ItemFocus') 792 789 … … 809 806 self.active = item.subject and item.subject.isIndirectlyInstantiated 810 807 808 @undoable 811 809 def execute(self): 812 810 item = get_parent_focus_item(self._window) … … 814 812 item.subject.isIndirectlyInstantiated = self.active 815 813 816 weave_method(IndirectlyInstantiatedComponentAction.execute, UndoTransactionAspect)817 814 register_action(IndirectlyInstantiatedComponentAction, 'ItemFocus') 818 815 … … 850 847 self.sensitive = self._isSensitive(cls_item.subject, item) 851 848 849 @undoable 852 850 def execute(self): 853 851 cls = self._getParent().subject … … 862 860 self._window.execute_action('ItemFocus') 863 861 864 weave_method(MoveAction.execute, UndoTransactionAspect)865 862 866 863 class MoveUpAction(MoveAction): … … 906 903 self.sensitive = isinstance(item, InterfaceItem) 907 904 905 @undoable 908 906 def execute(self): 909 907 item = get_parent_focus_item(self._window) … … 912 910 item.set_property('drawing-style', InterfaceItem.DRAW_ICON) 913 911 914 weave_method(FoldAction.execute, UndoTransactionAspect)915 912 register_action(FoldAction, 'ItemFocus') 916 913 … … 921 918 tooltip = 'View details' 922 919 920 @undoable 923 921 def execute(self): 924 922 item = get_parent_focus_item(self._window) … … 930 928 item.canvas.update_now() 931 929 932 weave_method(UnfoldAction.execute, UndoTransactionAspect)933 930 register_action(UnfoldAction, 'ItemFocus') 934 931 … … 957 954 self.active = False 958 955 956 @undoable 959 957 def execute(self): 960 958 item = get_parent_focus_item(self._window) … … 963 961 else: 964 962 del item.subject.appliedStereotype[self.stereotype] 965 966 weave_method(ApplyStereotypeAction.execute, UndoTransactionAspect)967 963 968 964 … … 1033 1029 new_rel.unlink() 1034 1030 1031 @undoable 1035 1032 def execute(self): 1036 1033 diagram_tab = self._window.get_current_diagram_tab() … … 1051 1048 DependencyItem) 1052 1049 1053 weave_method(CreateLinksAction.execute, UndoTransactionAspect)1054 1050 register_action(CreateLinksAction, 'ItemFocus', 'ItemSelect') 1055 1051 … … 1072 1068 pass 1073 1069 1070 @undoable 1074 1071 def execute(self): 1075 1072 if self.active: 1076 1073 item = get_parent_focus_item(self._window) 1077 1074 item.set_ordering(self.ordering) 1078 1079 weave_method(ObjectNodeOrderingAction.execute, UndoTransactionAspect)1080 1075 1081 1076 … … 1133 1128 self.active = item.props.show_ordering 1134 1129 1130 @undoable 1135 1131 def execute(self): 1136 1132 item = get_parent_focus_item(self._window) 1137 1133 item.props.show_ordering = self.active 1138 1134 1139 weave_method(ObjectNodeOrderingVisibiltyAction.execute, UndoTransactionAspect)1140 1135 register_action(ObjectNodeOrderingVisibiltyAction, 'ItemFocus') 1141 1136 … … 1158 1153 pass 1159 1154 1155 @undoable 1160 1156 def execute(self): 1161 1157 item = get_parent_focus_item(self._window) 1162 1158 item.rotate() 1163 1159 1164 weave_method(RotateAction.execute, UndoTransactionAspect)1165 1160 register_action(RotateAction, 'ItemFocus') 1166 1161 … … 1182 1177 pass 1183 1178 1179 @undoable 1184 1180 def execute(self): 1185 1181 """ … … 1259 1255 fb._connector.subject.value = name 1260 1256 1261 1262 weave_method(SplitFlowAction.execute, UndoTransactionAspect)1263 1257 register_action(SplitFlowAction, 'ItemFocus') 1264 1265 1258 1266 1259 … … 1280 1273 pass 1281 1274 1275 @undoable 1282 1276 def execute(self): 1283 1277 """ … … 1315 1309 fb.unlink() 1316 1310 1317 weave_method(MergeFlowAction.execute, UndoTransactionAspect)1318 1311 register_action(MergeFlowAction, 'ItemFocus') 1319 1312 … … 1335 1328 self.active = isinstance(item, ConnectorEndItem) 1336 1329 1330 @undoable 1337 1331 def execute(self): 1338 1332 item = get_focused_item(self._window) … … 1341 1335 assembly.request_update() 1342 1336 1343 weave_method(DisconnectConnector.execute, UndoTransactionAspect)1344 1337 register_action(DisconnectConnector, 'ItemFocus') 1338 1345 1339 1346 1340 class ApplyInterfaceAction(RadioAction, ObjectAction): … … 1364 1358 self.active = (self.interface == item.subject) 1365 1359 1360 @undoable 1366 1361 def execute(self): 1367 1362 item = get_focused_item(self._window) … … 1370 1365 else: 1371 1366 item.set_subject(None) 1372 1373 weave_method(ApplyInterfaceAction.execute, UndoTransactionAspect)1374 1375 1367 1376 1368 … … 1392 1384 self.active = item.props.has_lifetime 1393 1385 1386 @undoable 1394 1387 def execute(self): 1395 1388 item = get_parent_focus_item(self._window) 1396 1389 item.props.has_lifetime = self.active 1397 1390 1398 weave_method(LifelineHasLifetimeAction.execute, UndoTransactionAspect)1399 1391 register_action(LifelineHasLifetimeAction, 'ItemFocus') trunk/gaphor/gaphor/diagram/itemtool.py
r448 r897 6 6 from gtk.gdk import BUTTON_PRESS, _2BUTTON_PRESS, BUTTON_PRESS_MASK 7 7 import diacanvas 8 from gaphor.undomanager import get_undo_manager 8 9 from nameditem import NamedItem 9 10 from association import AssociationEnd … … 55 56 # If Button1 is pressed, we're going to move the item. 56 57 if event.button == 1: 57 view.canvas.undo_manager.begin_transaction()58 get_undo_manager().begin_transaction() 58 59 self.grabbed_item = view_item 59 60 self.old_pos = (event.x, event.y) … … 61 62 62 63 elif event.type == _2BUTTON_PRESS: 63 #view.canvas.undo_manager.begin_transaction()64 64 if isinstance(item, NamedItem): 65 65 self.execute_action('RenameItem') … … 69 69 70 70 def do_button_release_event(self, view, event): 71 view.canvas.undo_manager.commit_transaction()71 get_undo_manager().commit_transaction() 72 72 if self.grabbed_item: 73 73 self.grabbed_item = None trunk/gaphor/gaphor/diagram/nameditem.py
r772 r897 9 9 import diacanvas 10 10 from elementitem import ElementItem 11 from gaphor.undomanager import get_undo_manager 11 12 from gaphor.diagram.groupable import GroupBase 12 13 from gaphor.diagram.diagramitem import DiagramItem … … 154 155 new_text = new_text[:-l2] 155 156 156 self.canvas.get_undo_manager().begin_transaction()157 get_undo_manager().begin_transaction() 157 158 log.debug('setting %s to %s' % (self.subject_attr, new_text)) 158 159 setattr(self.subject, self.subject_attr, new_text) 159 self.canvas.get_undo_manager().commit_transaction()160 get_undo_manager().commit_transaction() 160 161 161 162 trunk/gaphor/gaphor/diagram/placementtool.py
r720 r897 5 5 from gaphor import UML 6 6 from gaphor import resource 7 from gaphor.undomanager import get_undo_manager 8 7 9 8 10 class PlacementTool(diacanvas.PlacementTool): … … 78 80 view.unselect_all() 79 81 #print 'Gaphor: on_button_press_event: %s' % self.__dict__ 80 view.canvas.get_undo_manager().begin_transaction()82 get_undo_manager().begin_transaction() 81 83 return diacanvas.PlacementTool.do_button_press_event(self, view, event) 82 84 … … 85 87 if resource('reset-tool-after-create', False): 86 88 view.set_tool(None) 87 view.canvas.get_undo_manager().commit_transaction()89 get_undo_manager().commit_transaction() 88 90 #print 'Gaphor: do_button_release_event: %s' % self.__dict__ 89 91 return diacanvas.PlacementTool.do_button_release_event(self, view, event) trunk/gaphor/gaphor/ui/diagramactions.py
r761 r897 9 9 from gaphor import resource 10 10 from gaphor import UML 11 from gaphor.undomanager import UndoTransactionAspect, weave_method11 from gaphor.undomanager import get_undo_manager, undoable 12 12 from gaphor.misc.action import Action, CheckAction, RadioAction 13 13 from gaphor.misc.action import register_action as _register_action … … 61 61 def update(self): 62 62 diagram_tab = self._window.get_current_diagram_tab() 63 self.sensitive = diagram_tab and diagram_tab.get_canvas().undo_manager.can_undo()64 65 def execute(self): 66 self._window.get_current_diagram_view().canvas.undo_manager.undo_transaction()63 self.sensitive = diagram_tab and get_undo_manager().can_undo() 64 65 def execute(self): 66 get_undo_manager().undo_transaction() 67 67 self.update() 68 68 self._window.execute_action('EditUndoStack') … … 82 82 def update(self): 83 83 diagram_tab = self._window.get_current_diagram_tab() 84 self.sensitive = diagram_tab and diagram_tab.get_canvas().undo_manager.can_redo()85 86 def execute(self): 87 self._window.get_current_diagram_view().canvas.undo_manager.redo_transaction()84 self.sensitive = diagram_tab and get_undo_manager().can_redo() 85 86 def execute(self): 87 get_undo_manager().redo_transaction() 88 88 self.update() 89 89 self._window.execute_action('EditUndoStack') … … 200 200 201 201 if view.is_focus(): 202 view.canvas.undo_manager.begin_transaction()202 get_undo_manager().begin_transaction() 203 203 try: 204 204 items = view.selected_items … … 206 206 i.item.unlink() 207 207 finally: 208 view.canvas.undo_manager.commit_transaction()208 get_undo_manager().commit_transaction() 209 209 210 210 def mayRemoveFromModal(self, view): … … 334 334 self._item.load(name, str(value)) 335 335 336 @undoable 336 337 def execute(self): 337 338 view = self._window.get_current_diagram_view() … … 375 376 view.select(view.find_view_item(item)) 376 377 377 weave_method(PasteAction.execute, UndoTransactionAspect)378 378 register_action(PasteAction, 'EditCopy') 379 379 trunk/gaphor/gaphor/ui/diagramtab.py
r677 r897 40 40 self.diagram = diagram 41 41 if diagram: 42 #log.info('set diagram')43 42 diagram.canvas.set_property ('allow_undo', 1) 44 43 diagram.connect(('name', '__unlink__'), self.__on_diagram_event) 45 #self.__undo_id = diagram.canvas.undo_manager.connect('begin_transaction', self.__on_diagram_undo)46 # Set capabilities:47 #self.__on_diagram_undo(diagram.canvas.undo_manager)48 44 49 45 if hasattr(self, 'view'): … … 146 142 self.owning_window.execute_action('ToolChange') 147 143 148 # def __on_diagram_undo(self, undo_manager):149 # #log.info('set undo stack %s' % (undo_manager))150 # self.owning_window.execute_action('editundostack')151 152 144 def __on_diagram_event(self, element, pspec): 153 145 if pspec == '__unlink__': trunk/gaphor/gaphor/ui/mainactions.py
r733 r897 14 14 from gaphor import UML 15 15 from gaphor import diagram 16 from gaphor import undomanager 17 #from gaphor.undomanager import UndoTransactionAspect, weave_method 16 from gaphor.undomanager import get_undo_manager 18 17 from gaphor.misc.action import Action, CheckAction, RadioAction, register_action 19 18 from gaphor.misc.action import DynamicMenu, ObjectAction, register_slot … … 140 139 worker = GIdleThread(storage.load_generator(filename), queue) 141 140 self._window.action_pool.insensivate_actions() 142 undomanager.get_undo_manager().clear_undo_stack()143 undomanager.get_undo_manager().clear_redo_stack()141 get_undo_manager().clear_undo_stack() 142 get_undo_manager().clear_redo_stack() 144 143 worker.start() 145 144 worker.wait() … … 625 624 626 625 def update(self): 627 self.sensitive = undomanager.get_undo_manager().can_undo()628 629 def execute(self): 630 undomanager.get_undo_manager().undo_transaction()626 self.sensitive = get_undo_manager().can_undo() 627 628 def execute(self): 629 get_undo_manager().undo_transaction() 631 630 #self.update() 632 631 self._window.execute_action('UndoStack') … … 645 644 646 645 def update(self): 647 self.sensitive = undomanager.get_undo_manager().can_redo()648 649 def execute(self): 650 undomanager.get_undo_manager().redo_transaction()646 self.sensitive = get_undo_manager().can_redo() 647 648 def execute(self): 649 get_undo_manager().redo_transaction() 651 650 #self.update() 652 651 self._window.execute_action('UndoStack') trunk/gaphor/gaphor/ui/mainwindow.py
r772 r897 6 6 from gaphor import resource 7 7 from gaphor import UML 8 from gaphor import undomanager8 from gaphor.undomanager import get_undo_manager 9 9 from gaphor.i18n import _ 10 10 from gaphor.ui import namespace … … 318 318 319 319 # Set some handles for the undo manager 320 undomanager.get_undo_manager().connect('begin_transaction', self.on_undo)321 undomanager.get_undo_manager().connect('add_undo_action', self.on_undo)320 #get_undo_manager().connect('begin_transaction', self.on_undo) 321 #get_undo_manager().connect('add_undo_action', self.on_undo) 322 322 323 323 def add_transient_window(self, window): trunk/gaphor/gaphor/undomanager.py
r505 r897 2 2 3 3 import gobject 4 import diacanvas5 6 from gaphor.misc.aspects import Aspect, weave_method7 4 8 5 … … 13 10 14 11 15 class UndoTransactionAspect(Aspect): 16 17 def __init__(self, method): 18 self.method = method 19 20 def before(self): 21 get_undo_manager().begin_transaction() 22 23 def after(self, retval, exc): 24 if exc: 25 get_undo_manager().discard_transaction() 26 else: 27 get_undo_manager().commit_transaction() 12 def undoable(func): 13 """Descriptor. Enables an undo transaction around the method/function. 14 """ 15 def wrapper(*args, **kwargs): 16 undo_manager = get_undo_manager() 17 undo_manager.begin_transaction() 18 try: 19 func(*args, **kwargs) 20 finally: 21 undo_manager.commit_transaction() 28 22 29 23 … … 68 62 69 63 70 class UndoManager(gobject.GObject , diacanvas.UndoManager):64 class UndoManager(gobject.GObject): 71 65 """Simple transaction manager for Gaphor. 72 66 This transaction manager supports nested transactions. … … 98 92 # self._short_circuit = False 99 93 100 # UndoManager interface:101 102 def on_begin_transaction(self):94 def begin_transaction(self): 95 """Add an action to the current transaction 96 """ 103 97 if self._in_undo: 104 98 return … … 114 108 self._transaction_depth += 1 115 109 116 def on_add_undo_action(self, action):110 def add_undo_action(self, action): 117 111 """Add an action to undo. An action 118 112 """ … … 129 123 self._current_transaction.add(action) 130 124 131 def on_commit_transaction(self):125 def commit_transaction(self): 132 126 if self._in_undo: 133 127 return … … 146 140 self._current_transaction = None 147 141 148 def on_discard_transaction(self):142 def discard_transaction(self): 149 143 if self._in_undo: 150 144 return … … 157 151 self._current_transaction = None 158 152 159 def on_undo_transaction(self):153 def undo_transaction(self): 160 154 if not self._undo_stack: 161 155 return … … 172 166 self._redo_stack.append(transaction) 173 167 174 def on_redo_transaction(self):168 def redo_transaction(self): 175 169 if not self._redo_stack: 176 170 return … … 184 178 self._undo_stack.append(transaction) 185 179 186 def on_in_transaction(self):180 def in_transaction(self): 187 181 return self._current_transaction is not None 188 182 189 def on_can_undo(self):183 def can_undo(self): 190 184 return bool(self._current_transaction or self._undo_stack) 191 185 192 def on_can_redo(self):186 def can_redo(self): 193 187 return bool(self._redo_stack) 194 188 195 gobject.type_register(UndoManager)196 diacanvas.set_undo_manager(UndoManager)197 189 198 190 # Register as resource: trunk/gaphor/run-gaphor.sh
r200 r897 1 1 2 python setup.py run "$@"2 python2.4 setup.py run "$@" trunk/gaphor/setup.py
r770 r897 18 18 from glob import glob 19 19 from commands import getoutput, getstatus, getstatusoutput 20 import py2app 20 21 from distutils.core import setup, Command 21 22 from distutils.command.build_py import build_py … … 416 417 'install_mo': install_mo, 417 418 'run': run_Gaphor 418 } 419 }, 420 app=['gaphor-osx.py'] 419 421 ) 420 422 trunk/gaphor/utils/dist_mo.py
r190 r897 1 1 # vim:sw=4:et 2 2 3 from distutils.dist import Distribution as _Distribution 3 #from distutils.dist import Distribution as _Distribution 4 from distutils.core import Distribution as _Distribution 4 5 5 6 class Distribution(_Distribution):
