[Commits] (john) Bug #2034 Hook up 'delete' in the Edit menu or remove it

commits at osafoundation.org commits at osafoundation.org
Mon Oct 4 17:33:17 PDT 2004


Commit by: john
Modified files:
chandler/parcels/osaf/views/main/Main.py 1.70 1.71
chandler/parcels/osaf/views/main/parcel.xml 1.117 1.118
chandler/parcels/osaf/views/main/SideBar.py 1.21 1.22
chandler/parcels/osaf/framework/blocks/ControlBlocks.py 1.129 1.130
chandler/parcels/osaf/framework/blocks/DynamicContainerBlocks.py 1.21 1.22
chandler/parcels/osaf/framework/blocks/parcel.xml 1.120 1.121
chandler/parcels/osaf/framework/blocks/Views.py 1.44 1.45
chandler/parcels/osaf/framework/blocks/Events/parcel.xml 1.56 1.57

Log message:
Bug #2034 Hook up 'delete' in the Edit menu or remove it

ViewCVS links:
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/views/main/Main.py.diff?r1=text&tr1=1.70&r2=text&tr2=1.71
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/views/main/parcel.xml.diff?r1=text&tr1=1.117&r2=text&tr2=1.118
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/views/main/SideBar.py.diff?r1=text&tr1=1.21&r2=text&tr2=1.22
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/ControlBlocks.py.diff?r1=text&tr1=1.129&r2=text&tr2=1.130
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/DynamicContainerBlocks.py.diff?r1=text&tr1=1.21&r2=text&tr2=1.22
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/parcel.xml.diff?r1=text&tr1=1.120&r2=text&tr2=1.121
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/Views.py.diff?r1=text&tr1=1.44&r2=text&tr2=1.45
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/Events/parcel.xml.diff?r1=text&tr1=1.56&r2=text&tr2=1.57

Index: chandler/parcels/osaf/views/main/parcel.xml
diff -u chandler/parcels/osaf/views/main/parcel.xml:1.117 chandler/parcels/osaf/views/main/parcel.xml:1.118
--- chandler/parcels/osaf/views/main/parcel.xml:1.117	Mon Oct  4 16:52:30 2004
+++ chandler/parcels/osaf/views/main/parcel.xml	Mon Oct  4 17:33:13 2004
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 
-<!-- $Revision: 1.117 $ -->
-<!-- $Date: 2004/10/04 23:52:30 $ -->
+<!-- $Revision: 1.118 $ -->
+<!-- $Date: 2004/10/05 00:33:13 $ -->
 <!-- Copyright (c) 2003-2004 Open Source Applications Foundation -->
 <!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
 
@@ -336,7 +336,7 @@
   <MenuItem itsName="NewNoteItem">
     <blockName>NewNoteItem</blockName>
     <title>Note</title>
-    <accel>N</accel>
+    <accel>Ctrl+N</accel>
     <helpString>Create a new Note</helpString>
     <event itemref="doc:NewNote"/>
   </MenuItem>
@@ -344,7 +344,7 @@
   <MenuItem itsName="NewMessageItem">
     <blockName>NewMessageItem</blockName>
     <title>Message</title>
-    <accel>M</accel>
+    <accel>Ctrl+M</accel>
     <helpString>Create a new Message</helpString>
     <event itemref="doc:NewMailMessage"/>
   </MenuItem>
@@ -378,7 +378,7 @@
   <MenuItem itsName="NewTabItem">
     <blockName>NewTabItem</blockName>
     <title>New Tab</title>
-    <accel>T</accel>
+    <accel>Ctrl+T</accel>
     <helpString>Open a new blank tab</helpString>
     <event itemref="events:New"/>
   </MenuItem>
@@ -400,7 +400,7 @@
   <MenuItem itsName="CloseTabItem">
     <blockName>CloseTabItem</blockName>
     <title>Close Tab</title>
-    <accel>W</accel>
+    <accel>Ctrl+W</accel>
     <helpString>Close the current tab</helpString>
     <event itemref="events:Close"/>
   </MenuItem>
@@ -486,7 +486,7 @@
   <MenuItem itsName="PrefsAccountsItem">
     <blockName>PrefsAccountsItem</blockName>
     <title>Accounts...</title>
-    <accel>A</accel>
+    <accel>Ctrl+A</accel>
     <helpString>Account Preferences</helpString>
     <event itemref="events:EditAccountPreferences"/>
   </MenuItem>
@@ -494,7 +494,7 @@
   <MenuItem itsName="QuitItem">
     <blockName>QuitItem</blockName>
     <title>Quit</title>
-    <accel>Q</accel>
+    <accel>Ctrl+Q</accel>
     <helpString value="Quit Chandler"/>
     <event itemref="events:Quit"/>
   </MenuItem>
@@ -502,7 +502,7 @@
   <MenuItem itsName="UndoItem">
     <blockName>UndoItem</blockName>
     <title>Undo</title>
-    <accel>Z</accel>
+    <accel>Ctrl+Z</accel>
     <event itemref="events:Undo"/>
     <helpString value="Can't Undo"/>
   </MenuItem>
@@ -510,7 +510,7 @@
   <MenuItem itsName="RedoItem">
     <blockName>RedoItem</blockName>
     <title>Redo</title>
-    <accel>Y</accel>
+    <accel>Ctrl+Y</accel>
     <event itemref="events:Redo"/>
     <helpString value="Can't Redo"/>
   </MenuItem>
@@ -523,21 +523,21 @@
   <MenuItem itsName="CutItem">
     <blockName>CutItem</blockName>
     <title>Cut</title>
-    <accel>X</accel>
+    <accel>Ctrl+X</accel>
     <event itemref="events:Cut"/>
   </MenuItem>
 
   <MenuItem itsName="CopyItem">
     <blockName>CopyItem</blockName>
     <title>Copy</title>
-    <accel>C</accel>
+    <accel>Ctrl+C</accel>
     <event itemref="events:Copy"/>
   </MenuItem>
 
   <MenuItem itsName="PasteItem">
     <blockName>PasteItem</blockName>
     <title>Paste</title>
-    <accel>V</accel>
+    <accel>Ctrl+V</accel>
     <event itemref="events:Paste"/>
   </MenuItem>
   
@@ -1280,7 +1280,6 @@
   <Table itsName="Sidebar"
          itemClass="osaf.views.main.SideBar.Sidebar">
     <contents itemref="doc:sidebarItemCollection"/>
-    <selection itemref="content:AllView"/>
     <elementDelegate>osaf.views.main.SideBar.SideBarDelegate</elementDelegate>
     <columnHeadings></columnHeadings>
     <columnData>displayName</columnData>

Index: chandler/parcels/osaf/framework/blocks/parcel.xml
diff -u chandler/parcels/osaf/framework/blocks/parcel.xml:1.120 chandler/parcels/osaf/framework/blocks/parcel.xml:1.121
--- chandler/parcels/osaf/framework/blocks/parcel.xml:1.120	Tue Sep 28 14:37:18 2004
+++ chandler/parcels/osaf/framework/blocks/parcel.xml	Mon Oct  4 17:33:14 2004
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 
-<!-- $Revision: 1.120 $ -->
-<!-- $Date: 2004/09/28 21:37:18 $ -->
+<!-- $Revision: 1.121 $ -->
+<!-- $Date: 2004/10/05 00:33:14 $ -->
 <!-- Copyright (c) 2003-2004 Open Source Applications Foundation -->
 <!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
 
@@ -769,9 +769,15 @@
     <classes key="python">osaf.framework.blocks.ControlBlocks.Table</classes>
     <superKinds itemref="docSchema:RectangularChild"/>
 
-    <Attribute itsName="selectedColumn">
-      <type itemref="String"/>
-      <initialValue type="String"></initialValue>
+    <Attribute itsName="selection">
+      <cardinality>list</cardinality>
+      <type itemref="List"/>
+      <initialValue />
+    </Attribute>
+    
+    <Attribute itsName="selectedItemToView">
+      <type itemref="SingleRef"/>
+      <initialValue itemref="None"/>
     </Attribute>
     
     <Attribute itsName="hideColumnHeadings">
@@ -786,7 +792,9 @@
     <attributes itemref="docSchema:columnWidths"/>
 
     <attributes itemref="docSchema:elementDelegate"/>
-    <attributes itemref="docSchema:selection"/>
+    <attributes itemref="docSchema:Table/selection"/>
+    <attributes itemref="docSchema:Table/selectedItemToView"/>
+    <attributes itemref="docSchema:Table/hideColumnHeadings"/>
   </Kind>  
 
   <!--

Index: chandler/parcels/osaf/framework/blocks/DynamicContainerBlocks.py
diff -u chandler/parcels/osaf/framework/blocks/DynamicContainerBlocks.py:1.21 chandler/parcels/osaf/framework/blocks/DynamicContainerBlocks.py:1.22
--- chandler/parcels/osaf/framework/blocks/DynamicContainerBlocks.py:1.21	Tue Sep 14 15:57:53 2004
+++ chandler/parcels/osaf/framework/blocks/DynamicContainerBlocks.py	Mon Oct  4 17:33:14 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.21 $"
-__date__ = "$Date: 2004/09/14 22:57:53 $"
+__version__ = "$Revision: 1.22 $"
+__date__ = "$Date: 2004/10/05 00:33:14 $"
 __copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
 __license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -412,8 +412,8 @@
             else:
                 assert (False)        
             title = block.title
-            if len(block.accel) > 0:
-                title = title + "\tCtrl+" + block.accel
+            if len (block.accel) > 0:
+                title = title + '\t' + block.accel
             
             """
               When inserting ourself into a MenuItem, we must actually

Index: chandler/parcels/osaf/views/main/Main.py
diff -u chandler/parcels/osaf/views/main/Main.py:1.70 chandler/parcels/osaf/views/main/Main.py:1.71
--- chandler/parcels/osaf/views/main/Main.py:1.70	Mon Oct  4 16:27:20 2004
+++ chandler/parcels/osaf/views/main/Main.py	Mon Oct  4 17:33:13 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.70 $"
-__date__ = "$Date: 2004/10/04 23:27:20 $"
+__version__ = "$Revision: 1.71 $"
+__date__ = "$Date: 2004/10/05 00:33:13 $"
 __copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
 __license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -95,24 +95,20 @@
 
         # lookup our Request Select Events
         rootPath = '//parcels/osaf/framework/blocks/Events/'
-        requestSelectSidebarItem = Globals.repository.findPath \
-                                (rootPath + 'RequestSelectSidebarItem')
-        requestSelectItem = Globals.repository.findPath \
-                                   (rootPath + 'RequestSelectItem')
-
-        # Tell the sidebar we want to go to the 'All' box
-        args = {}
-        args['itemName'] = 'AllView'
-        contactKind = Contacts.ContactsParcel.getContactKind ()
-        if newItem.isItemOf (contactKind):
-            # go to Contacts for a new Contact
-            args['itemName'] = 'ContactTableView'
-        self.Post(requestSelectSidebarItem, args)
+        requestSelectSidebarItem = \
+          Globals.repository.findPath (rootPath + 'RequestSelectSidebarItem')
+        selectionChangedInsideActiveView = \
+          Globals.repository.findPath (rootPath + 'SelectionChangedInsideActiveView')
+
+        # Tell the sidebar we want to go to the All or contacts box
+        if newItem.isItemOf (Contacts.ContactsParcel.getContactKind ()):
+            itemName = 'ContactTableView'
+        else:
+            itemName = 'AllTableView'
+        self.Post(requestSelectSidebarItem, {'itemName':itemName})
 
         # Tell the ActiveView to select our new item
-        args = {}
-        args['item'] = newItem
-        self.Post(requestSelectItem, args)
+        self.Post (selectionChangedInsideActiveView, {'item':newItem})
 
     def onNewEventUpdateUI (self, notification):
         notification.data ['Enable'] = True
@@ -209,7 +205,7 @@
         """
         sidebarPath = '//parcels/osaf/views/main/Sidebar'
         sidebar = Globals.repository.findPath (sidebarPath)
-        selectedBlock = sidebar.selection
+        selectedBlock = sidebar.contents [sidebar.widget.GetGridCursorRow ()]
         assert selectedBlock, "No selected block in the Sidebar"
         try:
             selectionContents = selectedBlock.contents
@@ -346,16 +342,15 @@
             return
 
         # lookup the Request Select Event
-        rootPath = '//parcels/osaf/framework/blocks/Events/'
-        requestSelectItem = Globals.repository.findPath \
-                                   (rootPath + 'RequestSelectItem')
+        selectionChangedInsideActiveView = \
+          Globals.repository.findPath ('//parcels/osaf/framework/blocks/Events/SelectionChangedInsideActiveView')
 
         # Tell the ActiveView to select the collection
         # It will pass the collection on to the Detail View.
-        args = {}
-        args['item'] = None
-        args['collection'] = True
-        self.Post(requestSelectItem, args)
+
+
+
+        self.Post (selectionChangedInsideActiveView, {'item':self.getSidebarSelectedCollection ()})
 
     def onShareOrManageEventUpdateUI (self, notification):
         """
@@ -530,20 +525,15 @@
             detail view """
 
         rootPath = '//parcels/osaf/framework/blocks/Events/'
-        requestSelectSidebarItem = Globals.repository.findPath \
-                                (rootPath + 'RequestSelectSidebarItem')
-        requestSelectItem = Globals.repository.findPath \
-                                   (rootPath + 'RequestSelectItem')
+        requestSelectSidebarItem = \
+          Globals.repository.findPath (rootPath + 'RequestSelectSidebarItem')
+        selectionChangedInsideActiveView = \
+          Globals.repository.findPath (rootPath + 'SelectionChangedInsideActiveView')
 
         # Tell the sidebar we want to select this view
-        args = {}
-        args['item'] = view
-        self.Post(requestSelectSidebarItem, args)
+        self.Post(requestSelectSidebarItem, {'item':view})
 
         if showDetailView:
             # Tell the ActiveView to select the collection
             # It will pass the collection on to the Detail View.
-            args = {}
-            args['item'] = None
-            args['collection'] = True
-            self.Post(requestSelectItem, args)
+            self.Post (selectionChangedInsideActiveView, {'item':view})

Index: chandler/parcels/osaf/views/main/SideBar.py
diff -u chandler/parcels/osaf/views/main/SideBar.py:1.21 chandler/parcels/osaf/views/main/SideBar.py:1.22
--- chandler/parcels/osaf/views/main/SideBar.py:1.21	Mon Sep 27 11:37:28 2004
+++ chandler/parcels/osaf/views/main/SideBar.py	Mon Oct  4 17:33:13 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.21 $"
-__date__ = "$Date: 2004/09/27 18:37:28 $"
+__version__ = "$Revision: 1.22 $"
+__date__ = "$Date: 2004/10/05 00:33:13 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -60,12 +60,5 @@
             else:
                 return
 
-        # Got the item. First tell ourself about it.
         self.onSelectionChangedEvent (notification)
 
-        # Next broadcast inside our boundary to tell dependent
-        self.Post (Globals.repository.findPath \
-                   ('//parcels/osaf/framework/blocks/Events/SelectionChanged'),
-                   {'item':item})
-
-

Index: chandler/parcels/osaf/framework/blocks/Views.py
diff -u chandler/parcels/osaf/framework/blocks/Views.py:1.44 chandler/parcels/osaf/framework/blocks/Views.py:1.45
--- chandler/parcels/osaf/framework/blocks/Views.py:1.44	Thu Sep 23 12:14:16 2004
+++ chandler/parcels/osaf/framework/blocks/Views.py	Mon Oct  4 17:33:14 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.44 $"
-__date__ = "$Date: 2004/09/23 19:14:16 $"
+__version__ = "$Revision: 1.45 $"
+__date__ = "$Date: 2004/10/05 00:33:14 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -153,12 +153,12 @@
         while (block):
             for child in block.childrenBlocks:
                 try:
-                    method = child.isDynamicChild
+                    method = getattr (type (child), 'isDynamicChild')
                 except AttributeError:
                     pass
                 else:
                     candidate = child
-                    isChild = method()
+                    isChild = method(child)
                     if isChild:
                         synchToDynamicBlock (child, True)
                         return

Index: chandler/parcels/osaf/framework/blocks/ControlBlocks.py
diff -u chandler/parcels/osaf/framework/blocks/ControlBlocks.py:1.129 chandler/parcels/osaf/framework/blocks/ControlBlocks.py:1.130
--- chandler/parcels/osaf/framework/blocks/ControlBlocks.py:1.129	Mon Oct  4 16:31:46 2004
+++ chandler/parcels/osaf/framework/blocks/ControlBlocks.py	Mon Oct  4 17:33:14 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.129 $"
-__date__ = "$Date: 2004/10/04 23:31:46 $"
+__version__ = "$Revision: 1.130 $"
+__date__ = "$Date: 2004/10/05 00:33:14 $"
 __copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
 __license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
 
@@ -491,8 +491,7 @@
 
         self.Bind(wx.EVT_SIZE, self.OnSize)
         self.Bind(wx.grid.EVT_GRID_COL_SIZE, self.OnColumnDrag)
-        self.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnWXSelectionChanged)
-        self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnSelectCell)
+        self.Bind(wx.grid.EVT_GRID_RANGE_SELECT, self.OnRangeSelect)
         self.Bind(wx.grid.EVT_GRID_CELL_RIGHT_CLICK, self.OnRightClick)
         self.Bind(wx.grid.EVT_GRID_CELL_BEGIN_DRAG, self.OnItemDrag)
 
@@ -517,6 +516,35 @@
         self.SetTable (gridTable, True, selmode=wx.grid.Grid.SelectRows)
 
         
+    def OnRangeSelect(self, event):
+        if not Globals.wxApplication.ignoreSynchronizeWidget:
+            topRow = event.GetTopRow()
+            bottomRow = event.GetBottomRow()
+            selecting = event.Selecting()
+            if topRow == 0 and bottomRow == (self.GetElementCount() -1):
+                self.blockItem.selection = []
+                if not selecting:
+                    return
+            self.blockItem.selection.append ([topRow, bottomRow, selecting])
+
+            topLeftList = self.GetSelectionBlockTopLeft()
+            topLeftList.sort()
+            try:
+                (row, column) = topLeftList [0]
+            except IndexError:
+                item = None
+            else:
+                item = self.blockItem.contents [row]
+
+            if item != self.blockItem.selectedItemToView:
+                self.blockItem.selectedItemToView = item
+                if item:
+                    gridTable = self.GetTable()
+                    for columnIndex in xrange (gridTable.GetNumberCols()):
+                        self.SetColLabelValue (columnIndex, gridTable.GetColLabelValue (columnIndex))
+                self.blockItem.PostASelectionChangedEvent (item)
+        event.Skip()
+
     def OnSize(self, event):
         if not Globals.wxApplication.ignoreSynchronizeWidget:
             size = event.GetSize()
@@ -537,22 +565,6 @@
             columnIndex = event.GetRowOrCol()
             self.blockItem.columnWidths [columnIndex] = self.GetColSize (columnIndex)
 
-    def OnSelectCell(self, event):
-        # Called by wxWidgets when a new cell is selected
-        currentItem = self.blockItem.selection
-        if currentItem is not None:
-            currentRow = self.blockItem.contents.index (currentItem)
-            selectedRow = event.GetRow()
-            if selectedRow != currentRow:
-                # selection moved up or down
-                self.SelectRow (selectedRow)
-                # remember the new selection
-                selectedItem = self.blockItem.contents [selectedRow]
-                self.blockItem.selection = selectedItem
-                # post a selection changed event
-                self.blockItem.PostASelectionChangedEvent (selectedItem)
-        event.Skip()
-
     def OnItemDrag(self, event):
         self.SetDragData (self.blockItem.contents [event.GetRow()].itsUUID)
 
@@ -560,26 +572,11 @@
         item = Globals.repository.findUUID(itemUUID)
         self.blockItem.contents.add (item)
 
-    def OnWXSelectionChanged(self, event):
-        if not Globals.wxApplication.ignoreSynchronizeWidget:
-            item = self.blockItem.contents [event.GetRow()]
-            if self.blockItem.selection != item:
-                self.blockItem.selection = item
-
-                ## Redraw headers
-                gridTable = self.GetTable()
-                for columnIndex in xrange (gridTable.GetNumberCols()):
-                    self.SetColLabelValue (columnIndex, gridTable.GetColLabelValue (columnIndex))
-
-            self.blockItem.PostASelectionChangedEvent (item)
-            self.blockItem.selectedColumn = self.blockItem.columnData [event.GetCol()]
-        event.Skip()
-        
     def OnRightClick(self, event):
         self.blockItem.DisplayContextMenu(event.GetPosition(),
                                           self.blockItem.contents [event.GetRow()])
 
-    def Reset(self): 
+    def wxSynchronizeWidget(self):
         """
           A Grid can't easily redisplay its contents, so we write the following
         helper function to readjust everything after the contents change
@@ -614,6 +611,19 @@
         for columnIndex in xrange (newColumns):
             self.SetColSize (columnIndex, self.blockItem.columnWidths [columnIndex])
 
+        self.ClearSelection()
+        for range in self.blockItem.selection:
+            if range [2]:
+                self.SelectBlock (range[0], 0, range[1], newColumns, True)
+            else:
+                for row in xrange (range[0], range[1] + 1):
+                    self.DeselectRow (row)
+        try:
+            row = self.blockItem.contents.index (self.blockItem.selectedItemToView)
+        except ValueError:
+            pass
+        else:
+            self.MakeCellVisible (row, 0)
         self.EndBatch() 
 
         #Update all displayed values
@@ -622,10 +632,6 @@
 
         self.ForceRefresh () 
 
-    def wxSynchronizeWidget(self):
-        self.Reset()
-        self.GoToItem (self.blockItem.selection)
-
     def GoToItem(self, item):
         if item:
             try:
@@ -633,18 +639,41 @@
             except ValueError:
                 item = None
         if item:
-            cursorColumn = 0
-            selectedColumn = self.blockItem.selectedColumn
-            for columnIndex in xrange (self.GetTable().GetNumberCols()):
-                if self.blockItem.columnData [columnIndex] == selectedColumn:
-                    cursorColumn = columnIndex
-                    break
-            self.SelectRow (row)
-            self.SetGridCursor (row, cursorColumn)
+            self.blockItem.selection.append ([row, row, True])
+            self.blockItem.selectedItemToView = row
+            self.SelectBlock (row, 0, row, self.GetColumnCount() - 1)
+            self.MakeCellVisible (row, 0)
         else:
+            self.blockItem.selection = []
+            self.blockItem.selectedItemToView = None
             self.ClearSelection()
             self.blockItem.PostASelectionChangedEvent (item)
 
+    def DeleteSelection (self):
+        self.blockItem.contents.beginUpdate()
+        topLeftList = self.GetSelectionBlockTopLeft()
+        bottomRightList = self.GetSelectionBlockBottomRight()
+        """
+          Clear the selection before removing the elements from the collection
+        otherwise our delegate will get called asking for deleted items
+        """
+        self.ClearSelection()
+        selectionRanges = []
+        for topLeft in topLeftList:
+            bottomRight = bottomRightList.pop (0)
+            selectionRanges.append ([topLeft[0], bottomRight[0]])
+        selectionRanges.sort()
+        selectionRanges.reverse()
+        contents = self.blockItem.contents
+        for range in selectionRanges:
+            for row in xrange (range[1], range [0] - 1, -1):
+                contents.remove (contents [row])
+        self.blockItem.selection = []
+        self.blockItem.selectedItemToView = None
+        Globals.repository.commit()
+        self.blockItem.contents.endUpdate()
+        self.blockItem.PostASelectionChangedEvent (None)
+
 
 class GridCellAttributeRenderer (wx.grid.PyGridCellRenderer):
     def __init__(self, type):
@@ -764,44 +793,29 @@
 class Table (RectangularChild):
     def __init__(self, *arguments, **keywords):
         super (Table, self).__init__ (*arguments, **keywords)
-        self.selection = None
 
     def instantiateWidget (self):
         return wxTable (self.parentBlock.widget, Block.getWidgetID(self))
 
     def onSelectionChangedEvent (self, notification):
-        """
-          Display the item in the widget.
-        """
-        self.selection = notification.data['item']
-        self.widget.GoToItem (self.selection)
+        item = notification.data ['item']
+        self.selectedItemToView = item
+        if item:
+            try:
+                row = self.contents.index (item)
+            except ValueError:
+                row = -1
+        if row < 0:
+            self.widget.ClearSelection()
+        else:
+            self.widget.SelectBlock (row, 0, row, self.widget.GetColumnCount() - 1)
+        self.PostASelectionChangedEvent (item)
 
     def onDeleteEvent (self, notification):
-        self.contents.beginUpdate()
-        for row in self.widget.GetSelectedRows():
-            self.contents.remove (self.contents [row])
-        self.contents.endUpdate()
+        self.widget.DeleteSelection()
         
     def onDeleteEventUpdateUI (self, notification):
-        notification.data ['Enable'] = self.widget.IsSelection()
-
-    def onRequestSelectItemEvent (self, notification):
-        # request the Table part of the Active View to change selection
-        newSelection = notification.data['item']
-        # A request to select None causes everything to be deselected
-        # If the 'collection' flag is set, select the collection in
-        # the Detail View.
-        if newSelection is None:
-            # deselect
-            self.onSelectionChangedEvent (notification)
-            if notification.data['collection'] == True:
-                # tell the Detail View to select the whole collection
-                self.PostASelectionChangedEvent (self.contents)
-        elif newSelection in self.contents:
-            # select the item
-            self.onSelectionChangedEvent (notification)
-            # tell the Detail View about the new selection
-            self.PostASelectionChangedEvent (newSelection)
+        notification.data ['Enable'] = len (self.selection) != 0
 
 class RadioBox(RectangularChild):
     def instantiateWidget(self):

Index: chandler/parcels/osaf/framework/blocks/Events/parcel.xml
diff -u chandler/parcels/osaf/framework/blocks/Events/parcel.xml:1.56 chandler/parcels/osaf/framework/blocks/Events/parcel.xml:1.57
--- chandler/parcels/osaf/framework/blocks/Events/parcel.xml:1.56	Mon Oct  4 13:53:05 2004
+++ chandler/parcels/osaf/framework/blocks/Events/parcel.xml	Mon Oct  4 17:33:15 2004
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
 
-<!-- $Revision: 1.56 $ -->
-<!-- $Date: 2004/10/04 20:53:05 $ -->
+<!-- $Revision: 1.57 $ -->
+<!-- $Date: 2004/10/05 00:33:15 $ -->
 <!-- Copyright (c) 2003 Open Source Applications Foundation -->
 <!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
 
@@ -36,8 +36,8 @@
     <subscribeAlwaysEvents itemref="events:ShowColumn"/>
     <subscribeAlwaysEvents itemref="events:GetNewMail"/>
     <subscribeAlwaysEvents itemref="events:SelectionChanged"/>
+    <subscribeAlwaysEvents itemref="events:SelectionChangedInsideActiveView"/>
     <subscribeAlwaysEvents itemref="events:RequestSelectSidebarItem"/>
-    <subscribeAlwaysEvents itemref="events:RequestSelectItem"/>
     <subscribeAlwaysEvents itemref="events:EnterPressed"/>
     <subscribeAlwaysEvents itemref="events:GenerateContentItems"/>
     <subscribeAlwaysEvents itemref="events:GenerateContacts"/>
@@ -132,15 +132,16 @@
     <dispatchEnum>BroadcastInsideMyEventBoundary</dispatchEnum>
   </BlockEvent>
 
+  <BlockEvent itsName="SelectionChangedInsideActiveView">
+    <methodName>onSelectionChangedEvent</methodName>
+    <dispatchEnum>BroadcastInsideActiveViewEventBoundary</dispatchEnum>
+  </BlockEvent>
+
   <BlockEvent itsName="RequestSelectSidebarItem">
     <dispatchEnum>SendToBlock</dispatchEnum>
     <dispatchToBlock itemref="doc:Sidebar"/>
   </BlockEvent>
 
-  <BlockEvent itsName="RequestSelectItem">
-    <dispatchEnum>BroadcastInsideActiveViewEventBoundary</dispatchEnum>
-  </BlockEvent>
-
   <BlockEvent itsName="EnterPressed">
     <dispatchEnum>BroadcastInsideMyEventBoundary</dispatchEnum>
   </BlockEvent>



More information about the Commits mailing list