[Commits] (donn) Added basic support for editing Mail messages,
and fixed several bugs:
commits at osafoundation.org
commits at osafoundation.org
Wed Aug 11 06:33:17 PDT 2004
Commit by: donn
Modified files:
chandler/parcels/osaf/contentmodel/ContentModel.py 1.23 1.24
chandler/parcels/osaf/contentmodel/parcel.xml 1.50 1.51
chandler/parcels/osaf/contentmodel/Query.py 1.2 1.3
chandler/parcels/osaf/framework/blocks/Block.py 1.57 1.58
chandler/parcels/osaf/framework/blocks/ContainerBlocks.py 1.123 1.124
chandler/parcels/osaf/framework/blocks/ControlBlocks.py 1.97 1.98
chandler/parcels/osaf/framework/blocks/NavigationBlocks.py 1.28 1.29
chandler/parcels/osaf/framework/blocks/parcel.xml 1.105 1.106
chandler/parcels/osaf/framework/blocks/detail/Detail.py 1.20 1.21
chandler/parcels/osaf/framework/blocks/detail/parcel.xml 1.17 1.18
chandler/parcels/osaf/framework/blocks/Events/parcel.xml 1.45 1.46
chandler/parcels/osaf/views/content/parcel.xml 1.57 1.58
chandler/parcels/osaf/views/main/Main.py 1.25 1.26
chandler/parcels/osaf/views/main/parcel.xml 1.86 1.87
Log message:
Added basic support for editing Mail messages, and fixed several bugs:
* Added a "Send" button to the Detail View
* Made Subject editable
* "ToAddress:" field now saves email addresses
* Added "All" view to the Sidebar
* Enabled the New toobar button and New Message menu items
- both of these do the same thing: create a message and take you to the 'All' box
* Created a "SelectionChangedSentToSidebar" Event to allow you to set the sidebar selection
* Changed the 'Out' box to show Mail messages
* Added subkind of BlockEvent - KindParameterizedEvent, which has a Kind attribute
* Made "New" a KindParameterizedEvent, handled by the MainView
* Moved LayoutSelector toolbar to Main, so it can be copied instead of duplicated
* Added convenience convert-to-string methods for redirectTo attributes to ContentModel
* Found a typo in render() - 'block' not defined.
* Changed wxBoxContainer.wxSynchronizeWidget() to only layout when isShown
* Added "exactKind" attribute to Query so you can match on a Kind exactly
* Fixed "Notes" to only show Notes
ViewCVS links:
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/contentmodel/ContentModel.py.diff?r1=text&tr1=1.23&r2=text&tr2=1.24
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/contentmodel/parcel.xml.diff?r1=text&tr1=1.50&r2=text&tr2=1.51
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/contentmodel/Query.py.diff?r1=text&tr1=1.2&r2=text&tr2=1.3
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/Block.py.diff?r1=text&tr1=1.57&r2=text&tr2=1.58
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/ContainerBlocks.py.diff?r1=text&tr1=1.123&r2=text&tr2=1.124
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/ControlBlocks.py.diff?r1=text&tr1=1.97&r2=text&tr2=1.98
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/NavigationBlocks.py.diff?r1=text&tr1=1.28&r2=text&tr2=1.29
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/parcel.xml.diff?r1=text&tr1=1.105&r2=text&tr2=1.106
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/detail/Detail.py.diff?r1=text&tr1=1.20&r2=text&tr2=1.21
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/detail/parcel.xml.diff?r1=text&tr1=1.17&r2=text&tr2=1.18
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/framework/blocks/Events/parcel.xml.diff?r1=text&tr1=1.45&r2=text&tr2=1.46
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/views/content/parcel.xml.diff?r1=text&tr1=1.57&r2=text&tr2=1.58
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/views/main/Main.py.diff?r1=text&tr1=1.25&r2=text&tr2=1.26
http://cvs.osafoundation.org/index.cgi/chandler/parcels/osaf/views/main/parcel.xml.diff?r1=text&tr1=1.86&r2=text&tr2=1.87
Index: chandler/parcels/osaf/framework/blocks/Block.py
diff -u chandler/parcels/osaf/framework/blocks/Block.py:1.57 chandler/parcels/osaf/framework/blocks/Block.py:1.58
--- chandler/parcels/osaf/framework/blocks/Block.py:1.57 Tue Aug 3 12:59:57 2004
+++ chandler/parcels/osaf/framework/blocks/Block.py Wed Aug 11 06:33:13 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.57 $"
-__date__ = "$Date: 2004/08/03 19:59:57 $"
+__version__ = "$Revision: 1.58 $"
+__date__ = "$Date: 2004/08/11 13:33:13 $"
__copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -92,10 +92,10 @@
except:
pass
else:
- if not subscribedBlocks.has_key (block.itsUUID):
- subscribedBlocks [block.itsUUID] = UUID()
+ if not subscribedBlocks.has_key (self.itsUUID):
+ subscribedBlocks [self.itsUUID] = UUID()
Globals.notificationManager.Subscribe (subscribeAlwaysEvents,
- subscribedBlocks [block.itsUUID],
+ subscribedBlocks [self.itsUUID],
Globals.mainView.dispatchEvent)
doFreeze = isinstance (widget, wx.Window)
Index: chandler/parcels/osaf/contentmodel/ContentModel.py
diff -u chandler/parcels/osaf/contentmodel/ContentModel.py:1.23 chandler/parcels/osaf/contentmodel/ContentModel.py:1.24
--- chandler/parcels/osaf/contentmodel/ContentModel.py:1.23 Sun Aug 8 19:13:23 2004
+++ chandler/parcels/osaf/contentmodel/ContentModel.py Wed Aug 11 06:33:12 2004
@@ -1,14 +1,15 @@
""" Classes used for contentmodel parcel and kinds.
"""
-__revision__ = "$Revision: 1.23 $"
-__date__ = "$Date: 2004/08/09 02:13:23 $"
+__revision__ = "$Revision: 1.24 $"
+__date__ = "$Date: 2004/08/11 13:33:12 $"
__copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
from application.Parcel import Parcel
import repository.item.Item as Item
import repository.item.Query as Query
+import repository.persistence.XMLRepositoryView as XMLRepositoryView
import logging
import application.Globals as Globals
@@ -419,6 +420,55 @@
return clone
+ def ItemWhoString (self):
+ import osaf.contentmodel.contacts.Contacts as Contacts
+ """
+ return str(item.who)
+ DLDTBD - XMLRefDicts that have EmailAddress items should know how to do this
+ """
+ try:
+ whoContacts = self.who # get redirected who list
+ except AttributeError:
+ return ''
+ try:
+ numContacts = len(whoContacts)
+ except TypeError:
+ numContacts = 0
+ if numContacts > 0:
+ whoNames = []
+ for whom in whoContacts.values():
+ whoNames.append(whom.getItemDisplayName())
+ whoString = ', '.join(whoNames)
+ else:
+ whoString = ''
+ if isinstance(whoContacts, Contacts.ContactName):
+ whoString = whoContacts.firstName + ' ' + whoContacts.lastName
+ return whoString
+
+ def ItemBodyString (self):
+ """
+ return str(item.body) converts from text to string
+ """
+ try:
+ noteBody = self.body
+ except AttributeError:
+ noteBody = ''
+ else:
+ if isinstance(noteBody, XMLRepositoryView.XMLText):
+ # Read the unicode stream from the XML
+ noteBody = noteBody.getInputStream().read()
+ return noteBody
+
+ def ItemAboutString (self):
+ """
+ return str(item.about)
+ """
+ try:
+ about = self.about
+ except AttributeError:
+ about = ''
+ return about
+
class Project(Item.Item):
def __init__(self, name=None, parent=None, kind=None):
if not parent:
Index: chandler/parcels/osaf/views/main/parcel.xml
diff -u chandler/parcels/osaf/views/main/parcel.xml:1.86 chandler/parcels/osaf/views/main/parcel.xml:1.87
--- chandler/parcels/osaf/views/main/parcel.xml:1.86 Sun Aug 8 19:13:01 2004
+++ chandler/parcels/osaf/views/main/parcel.xml Wed Aug 11 06:33:15 2004
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.86 $ -->
-<!-- $Date: 2004/08/09 02:13:01 $ -->
+<!-- $Revision: 1.87 $ -->
+<!-- $Date: 2004/08/11 13:33:15 $ -->
<!-- Copyright (c) 2003 Open Source Applications Foundation -->
<!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
@@ -15,6 +15,7 @@
xmlns:demo="http://osafoundation.org/parcels/osaf/views/demo"
xmlns:content="http://osafoundation.org/parcels/osaf/views/content"
xmlns:contentModel="http://osafoundation.org/parcels/osaf/contentmodel"
+ xmlns:mail="http://osafoundation.org/parcels/osaf/contentmodel/mail"
xmlns:calendar="http://osafoundation.org/parcels/osaf/framework/blocks/calendar"
xmlns:stockQuote="http://osafoundation.org/parcels/osaf/examples/stockquote/views">
@@ -60,11 +61,12 @@
<dispatchToBlock itemref="doc:NavigationBar"/>
</BlockEvent>
- <BlockEvent itemName="New">
+ <KindParameterizedEvent itemName="NewMailMessage">
+ <kindParameter itemref="mail:MailMessage"/>
<dispatchEnum>SendToBlock</dispatchEnum>
- <methodName>navbarNew</methodName>
- <dispatchToBlock itemref="doc:NavigationBar"/>
- </BlockEvent>
+ <methodName>onNewEvent</methodName>
+ <dispatchToBlock itemref="doc:MainView"/>
+ </KindParameterizedEvent>
<BlockEvent itemName="Reply">
<dispatchEnum>SendToBlock</dispatchEnum>
@@ -345,7 +347,7 @@
<blockName>NewMessageItem</blockName>
<title>Message</title>
<helpString>Create a new Message</helpString>
- <event itemref="events:NULL"/>
+ <event itemref="doc:NewMailMessage"/>
</MenuItem>
<MenuItem itsName="NewTaskItem">
@@ -1132,7 +1134,6 @@
<subscribeWhenVisibleEvents itemref="doc:GoBack"/>
<subscribeWhenVisibleEvents itemref="doc:GoForward"/>
<subscribeWhenVisibleEvents itemref="doc:Sync"/>
- <subscribeWhenVisibleEvents itemref="doc:New"/>
<subscribeWhenVisibleEvents itemref="doc:Reply"/>
<subscribeWhenVisibleEvents itemref="doc:Discuss"/>
<subscribeWhenVisibleEvents itemref="doc:Forward"/>
@@ -1202,7 +1203,7 @@
<bitmap>application/images/new.png</bitmap>
<toolbarItemKind>Button</toolbarItemKind>
<helpString>Create a new Item</helpString>
- <event itemref="doc:New"/>
+ <event itemref="doc:NewMailMessage"/>
</ToolbarItem>
<ToolbarItem itsName="ReplyButton">
@@ -1287,6 +1288,69 @@
<StatusBar itsName="StatusBar">
</StatusBar>
+ <!-- LayoutSelector -->
+ <Toolbar itemName="LayoutSelector">
+ <blockName>LayoutSelector</blockName>
+ <childrenBlocks itemref="doc:ListViewButton"/>
+ <childrenBlocks itemref="doc:MonthViewButton"/>
+ <childrenBlocks itemref="doc:WeekViewButton"/>
+ <childrenBlocks itemref="doc:DayViewButton"/>
+ <!-- Attributes -->
+ <toolSize>16,16</toolSize>
+ <separatorWidth>100</separatorWidth>
+ <stretchFactor>0.0</stretchFactor>
+ <subscribeWhenVisibleEvents itemref="doc:SelectionChanged"/>
+ </Toolbar>
+
+ <BlockEvent itemName="SelectionChanged">
+ <methodName>onSelectionChanged</methodName>
+ <dispatchEnum>BroadcastEverywhere</dispatchEnum>
+ </BlockEvent>
+
+ <!--
+ ToolbarItems
+ -->
+ <ToolbarItem itsName="ListViewButton">
+ <blockName>ListViewButton1</blockName>
+ <title>List View</title>
+ <bitmap>application/images/list.png</bitmap>
+ <selectedBitmap></selectedBitmap>
+ <toolbarItemKind>Radio</toolbarItemKind>
+ <helpString>Display the view in list mode</helpString>
+ <event itemref="doc:SelectionChanged"/>
+ </ToolbarItem>
+
+ <ToolbarItem itsName="MonthViewButton">
+ <blockName>MonthViewButton1</blockName>
+ <title>Month View</title>
+ <bitmap>application/images/month.png</bitmap>
+ <selectedBitmap></selectedBitmap>
+ <toolbarItemKind>Radio</toolbarItemKind>
+ <helpString>Display the view in month mode</helpString>
+ <event itemref="doc:SelectionChanged"/>
+ </ToolbarItem>
+
+ <ToolbarItem itsName="WeekViewButton">
+ <blockName>WeekViewButton1</blockName>
+ <title>Week View</title>
+ <bitmap>application/images/week.png</bitmap>
+ <selectedBitmap></selectedBitmap>
+ <toolbarItemKind>Radio</toolbarItemKind>
+ <helpString>Display the view in week mode</helpString>
+ <event itemref="doc:SelectionChanged"/>
+ </ToolbarItem>
+
+ <ToolbarItem itsName="DayViewButton">
+ <blockName>DayViewButton1</blockName>
+ <title>Day View</title>
+ <bitmap>application/images/day.png</bitmap>
+ <selectedBitmap></selectedBitmap>
+ <toolbarItemKind>Radio</toolbarItemKind>
+ <helpString>Display the view in day mode</helpString>
+ <event itemref="doc:SelectionChanged"/>
+ </ToolbarItem>
+
+
<!--
Layout blocks
-->
@@ -1314,6 +1378,7 @@
</BoxContainer>
<contentModel:NamedCollection itsName="sidebarItemCollection">
+ <inclusions uuidOf="content:AllTableView"/>
<inclusions uuidOf="content:InTableView"/>
<inclusions uuidOf="content:OutTableView"/>
<inclusions uuidOf="content:CalendarTableView"/>
@@ -1378,6 +1443,7 @@
<subscribeWhenVisibleEvents itemref="doc:AddTaskTableView"/>
<subscribeWhenVisibleEvents itemref="doc:AddMailTableView"/>
<subscribeWhenVisibleEvents itemref="doc:AddKindViews"/>
+ <subscribeWhenVisibleEvents itemref="doc:NewMailMessage"/>
<!-- Attributes -->
<orientationEnum>Vertical</orientationEnum>
Index: chandler/parcels/osaf/framework/blocks/ControlBlocks.py
diff -u chandler/parcels/osaf/framework/blocks/ControlBlocks.py:1.97 chandler/parcels/osaf/framework/blocks/ControlBlocks.py:1.98
--- chandler/parcels/osaf/framework/blocks/ControlBlocks.py:1.97 Tue Aug 10 11:57:53 2004
+++ chandler/parcels/osaf/framework/blocks/ControlBlocks.py Wed Aug 11 06:33:13 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.97 $"
-__date__ = "$Date: 2004/08/10 18:57:53 $"
+__version__ = "$Revision: 1.98 $"
+__date__ = "$Date: 2004/08/11 13:33:13 $"
__copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -644,6 +644,38 @@
self.selection = notification.data['item']
self.widget.GoToItem (self.selection)
+ def onSelectionChangedSentToSidebarEvent (self, notification):
+ # Request the sidebar to change selection
+ # Item specified is usually by name
+ try:
+ item = notification.data['item']
+ except KeyError:
+ # find the item by name
+ itemName = notification.data['itemName']
+ for item in self.contents:
+ if item.itsName == itemName:
+ notification.data['item'] = item
+ break
+ 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})
+
+ def onSelectionChangedBroadcastEverywhereEvent (self, notification):
+ # request the Table part of the Active View to change selection
+ newSelection = notification.data['item']
+ if newSelection in self.contents:
+ self.onSelectionChangedEvent (notification)
+ self.Post (Globals.repository.findPath \
+ ('//parcels/osaf/framework/blocks/Events/SelectionChanged'),
+ {'item':newSelection})
+
class RadioBox(RectangularChild):
def instantiateWidget(self):
@@ -666,7 +698,6 @@
if self.blockItem.isShown != self.IsShown():
self.Show (self.blockItem.isShown)
-
class StaticText(RectangularChild):
def instantiateWidget (self):
if self.textAlignmentEnum == "Left":
Index: chandler/parcels/osaf/contentmodel/Query.py
diff -u chandler/parcels/osaf/contentmodel/Query.py:1.2 chandler/parcels/osaf/contentmodel/Query.py:1.3
--- chandler/parcels/osaf/contentmodel/Query.py:1.2 Tue Jul 13 11:44:50 2004
+++ chandler/parcels/osaf/contentmodel/Query.py Wed Aug 11 06:33:12 2004
@@ -49,7 +49,7 @@
def __refresh(self):
self.results = []
- for item in RepositoryQuery.KindQuery().run(self.data):
+ for item in RepositoryQuery.KindQuery(recursive = not self.exactKind).run(self.data):
self.results.append(item)
self.__dirty()
Index: chandler/parcels/osaf/framework/blocks/NavigationBlocks.py
diff -u chandler/parcels/osaf/framework/blocks/NavigationBlocks.py:1.28 chandler/parcels/osaf/framework/blocks/NavigationBlocks.py:1.29
--- chandler/parcels/osaf/framework/blocks/NavigationBlocks.py:1.28 Mon Jul 26 10:31:05 2004
+++ chandler/parcels/osaf/framework/blocks/NavigationBlocks.py Wed Aug 11 06:33:13 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.28 $"
-__date__ = "$Date: 2004/07/26 17:31:05 $"
+__version__ = "$Revision: 1.29 $"
+__date__ = "$Date: 2004/08/11 13:33:13 $"
__copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -62,13 +62,6 @@
def navbarSyncUpdateUI (self, notification):
notification.data ['Enable'] = False
- def navbarNew(self, notification):
- # placeholder for a nav bar button
- pass
-
- def navbarNewUpdateUI (self, notification):
- notification.data ['Enable'] = False
-
def navbarReply(self, notification):
# placeholder for a nav bar button
pass
Index: chandler/parcels/osaf/contentmodel/parcel.xml
diff -u chandler/parcels/osaf/contentmodel/parcel.xml:1.50 chandler/parcels/osaf/contentmodel/parcel.xml:1.51
--- chandler/parcels/osaf/contentmodel/parcel.xml:1.50 Tue Aug 3 02:34:25 2004
+++ chandler/parcels/osaf/contentmodel/parcel.xml Wed Aug 11 06:33:12 2004
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Parcel manifest for Pim Schema -->
-<!-- $Revision: 1.50 $ -->
-<!-- $Date: 2004/08/03 09:34:25 $ -->
+<!-- $Revision: 1.51 $ -->
+<!-- $Date: 2004/08/11 13:33:12 $ -->
<!-- Copyright (c) 2003 Open Source Applications Foundation -->
<!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
@@ -333,6 +333,11 @@
<copyPolicy value="cascade"/>
</core:Attribute>
+ <core:Attribute itsName="exactKind">
+ <core:type itemref="core:Boolean"/>
+ <initialValue type="core:Boolean" value="False"/>
+ </core:Attribute>
+
<core:Kind itsName="Query">
<core:classes key="python">osaf.contentmodel.Query.Query</core:classes>
<core:superKinds itemref="core:Item"/>
@@ -342,6 +347,7 @@
<core:attributes itemref="queryEnum"/>
<core:attributes itemref="data"/>
<core:attributes itemref="results"/>
+ <core:attributes itemref="exactKind"/>
<core:Cloud itsName="DefaultCloud">
<core:Endpoint itsName="queryOwner">
Index: chandler/parcels/osaf/framework/blocks/ContainerBlocks.py
diff -u chandler/parcels/osaf/framework/blocks/ContainerBlocks.py:1.123 chandler/parcels/osaf/framework/blocks/ContainerBlocks.py:1.124
--- chandler/parcels/osaf/framework/blocks/ContainerBlocks.py:1.123 Tue Aug 3 17:40:35 2004
+++ chandler/parcels/osaf/framework/blocks/ContainerBlocks.py Wed Aug 11 06:33:13 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.123 $"
-__date__ = "$Date: 2004/08/04 00:40:35 $"
+__version__ = "$Revision: 1.124 $"
+__date__ = "$Date: 2004/08/11 13:33:13 $"
__copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -28,8 +28,7 @@
childBlock.stretchFactor,
wxRectangularChild.CalculateWXFlag(childBlock),
wxRectangularChild.CalculateWXBorder(childBlock))
- self.Layout()
-
+ self.Layout()
class BoxContainer (RectangularChild):
def instantiateWidget (self):
Index: chandler/parcels/osaf/views/main/Main.py
diff -u chandler/parcels/osaf/views/main/Main.py:1.25 chandler/parcels/osaf/views/main/Main.py:1.26
--- chandler/parcels/osaf/views/main/Main.py:1.25 Sun Aug 8 19:13:01 2004
+++ chandler/parcels/osaf/views/main/Main.py Wed Aug 11 06:33:15 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.25 $"
-__date__ = "$Date: 2004/08/09 02:13:01 $"
+__version__ = "$Revision: 1.26 $"
+__date__ = "$Date: 2004/08/11 13:33:15 $"
__copyright__ = "Copyright (c) 2003 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -8,7 +8,9 @@
from osaf.framework.notifications.Notification import Notification
import wx
import os
+from mx import DateTime
import application.Application
+import osaf.contentmodel.mail.Mail as Mail
from application.SplashScreen import SplashScreen
from application.Parcel import Manager as ParcelManager
from osaf.mail.imap import IMAPDownloader
@@ -109,6 +111,43 @@
account = accountList[0]
IMAPDownloader (account).getMail()
+ def NewItemName (cls):
+ """
+ Return a unique name of a new item
+ """
+ itemNumber = MainView.AnonymousItemNumber
+ MainView.AnonymousItemNumber += 1
+ return "Anonymous" + str (itemNumber)
+ NewItemName = classmethod (NewItemName)
+ AnonymousItemNumber = 1
+
+ def onNewEvent (self, notification):
+ # create a new mail message
+ event = notification.event
+ newMessage = event.kindParameter.newItem (self.NewItemName(), self)
+ newMessage.date = DateTime.now()
+ Globals.repository.commit()
+
+ # lookup our selectionChangedEvents
+ rootPath = '//parcels/osaf/framework/blocks/Events/'
+ sidebarSelectionChanged = Globals.repository.findPath \
+ (rootPath + 'SelectionChangedSentToSidebar')
+ activeViewSelectionChanged = Globals.repository.findPath \
+ (rootPath + 'SelectionChangedBroadcastEverywhere')
+
+ # Tell the sidebar we want to go to the 'All' box
+ args = {}
+ args['itemName'] = 'AllTableView'
+ self.Post(sidebarSelectionChanged, args)
+
+ # Tell the ActiveView to select our new item
+ args = {}
+ args['item'] = newMessage
+ self.Post(activeViewSelectionChanged, args)
+
+ def onNewEventUpdateUI (self, notification):
+ notification.data ['Enable'] = True
+
# Test Methods
def onGenerateContentItemsEvent(self, notification):
Index: chandler/parcels/osaf/framework/blocks/Events/parcel.xml
diff -u chandler/parcels/osaf/framework/blocks/Events/parcel.xml:1.45 chandler/parcels/osaf/framework/blocks/Events/parcel.xml:1.46
--- chandler/parcels/osaf/framework/blocks/Events/parcel.xml:1.45 Sun Aug 8 19:13:01 2004
+++ chandler/parcels/osaf/framework/blocks/Events/parcel.xml Wed Aug 11 06:33:14 2004
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.45 $ -->
-<!-- $Date: 2004/08/09 02:13:01 $ -->
+<!-- $Revision: 1.46 $ -->
+<!-- $Date: 2004/08/11 13:33:14 $ -->
<!-- Copyright (c) 2003 Open Source Applications Foundation -->
<!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
@@ -33,6 +33,8 @@
<subscribeAlwaysEvents itemref="events:EditMailAccount"/>
<subscribeAlwaysEvents itemref="events:GetNewMail"/>
<subscribeAlwaysEvents itemref="events:SelectionChanged"/>
+ <subscribeAlwaysEvents itemref="events:SelectionChangedSentToSidebar"/>
+ <subscribeAlwaysEvents itemref="events:SelectionChangedBroadcastEverywhere"/>
<subscribeAlwaysEvents itemref="events:EnterPressed"/>
<subscribeAlwaysEvents itemref="events:GenerateContentItems"/>
<subscribeAlwaysEvents itemref="events:GenerateContacts"/>
@@ -114,6 +116,15 @@
<dispatchEnum>BroadcastInsideMyEventBoundary</dispatchEnum>
</BlockEvent>
+ <BlockEvent itsName="SelectionChangedSentToSidebar">
+ <dispatchEnum>SendToBlock</dispatchEnum>
+ <dispatchToBlock itemref="doc:Sidebar"/>
+ </BlockEvent>
+
+ <BlockEvent itsName="SelectionChangedBroadcastEverywhere">
+ <dispatchEnum>BroadcastEverywhere</dispatchEnum>
+ </BlockEvent>
+
<BlockEvent itsName="EnterPressed">
<dispatchEnum>BroadcastInsideMyEventBoundary</dispatchEnum>
</BlockEvent>
Index: chandler/parcels/osaf/framework/blocks/parcel.xml
diff -u chandler/parcels/osaf/framework/blocks/parcel.xml:1.105 chandler/parcels/osaf/framework/blocks/parcel.xml:1.106
--- chandler/parcels/osaf/framework/blocks/parcel.xml:1.105 Fri Aug 6 17:08:11 2004
+++ chandler/parcels/osaf/framework/blocks/parcel.xml Wed Aug 11 06:33:13 2004
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.105 $ -->
-<!-- $Date: 2004/08/07 00:08:11 $ -->
+<!-- $Revision: 1.106 $ -->
+<!-- $Date: 2004/08/11 13:33:13 $ -->
<!-- Copyright (c) 2003 Open Source Applications Foundation -->
<!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
@@ -226,6 +226,18 @@
<attributes itemref="docSchema:ChoiceEvent/choice"/>
</Kind>
+ <Kind itsName="KindParameterizedEvent">
+ <classes key="python">osaf.framework.blocks.Block.BlockEvent</classes>
+ <superKinds itemref="docSchema:BlockEvent"/>
+
+ <Attribute itsName="kindParameter">
+ <type itemref="Kind"/>
+ <required>True</required>
+ </Attribute>
+
+ <attributes itemref="docSchema:KindParameterizedEvent/kindParameter"/>
+ </Kind>
+
<Kind itsName="ModifyContentsEvent">
<classes key="python">osaf.framework.blocks.Block.BlockEvent</classes>
<superKinds itemref="docSchema:BlockEvent"/>
Index: chandler/parcels/osaf/framework/blocks/detail/Detail.py
diff -u chandler/parcels/osaf/framework/blocks/detail/Detail.py:1.20 chandler/parcels/osaf/framework/blocks/detail/Detail.py:1.21
--- chandler/parcels/osaf/framework/blocks/detail/Detail.py:1.20 Sun Aug 8 19:12:13 2004
+++ chandler/parcels/osaf/framework/blocks/detail/Detail.py Wed Aug 11 06:33:13 2004
@@ -1,5 +1,5 @@
-__version__ = "$Revision: 1.20 $"
-__date__ = "$Date: 2004/08/09 02:12:13 $"
+__version__ = "$Revision: 1.21 $"
+__date__ = "$Date: 2004/08/11 13:33:13 $"
__copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -8,13 +8,11 @@
import osaf.framework.blocks.Block as Block
import osaf.framework.blocks.DynamicContainerBlocks as DynamicContainerBlocks
import osaf.framework.blocks.ControlBlocks as ControlBlocks
-import repository.persistence.XMLRepositoryView as XMLRepositoryView
import osaf.contentmodel.mail.Mail as Mail
import osaf.contentmodel.ContentModel as ContentModel
import osaf.contentmodel.tasks.Task as Task
import osaf.contentmodel.calendar.Calendar as Calendar
-import osaf.contentmodel.Notes as Notes
-import osaf.contentmodel.contacts.Contacts as Contacts
+import repository.item.Query as Query
import wx
"""
@@ -61,6 +59,7 @@
def reNotifyInside(block, item):
notifyParent = False
try:
+ # process from the children up
for child in block.childrenBlocks:
notify = reNotifyInside (child, item)
notifyParent = notifyParent or notify
@@ -84,6 +83,24 @@
self.synchronizeDetailView(item)
super(DetailRoot, self).synchronizeWidget ()
+ def onDestroyWidget (self):
+ # Hack - DLDTBD - remove
+ # set ourself to be shown, to work around Windows DetailView garbage problem.
+ def showReentrant (block):
+ block.isShown = True
+ for child in block.childrenBlocks:
+ showReentrant (child)
+ super(DetailRoot, self).onDestroyWidget ()
+ showReentrant (self)
+
+ def onSendMailMessageEvent (self, notification):
+ item = self.selectedItem()
+ # DLDTBD - Brian, paste a call to the mail service here
+ # item is the MailMessage
+ print "Email Subject is %s" % item.ItemAboutString ()
+ print "Email To field is %s" % item.ItemWhoString ()
+ print "Email Body is %s" % item.ItemBodyString ()
+
class DetailSynchronizer(object):
"""
Mixin class that handles synchronizeWidget and
@@ -107,23 +124,24 @@
shouldShow = item is not None
return self.show(shouldShow)
- def show(self, shouldShow):
+ def show (self, shouldShow):
# if the show status has changed, tell our widget, and return True
- if shouldShow != self.isShown:
- try:
- widget = self.widget
- except AttributeError:
- return False
+ try:
+ widget = self.widget
+ except AttributeError:
+ return False
+ if shouldShow != widget.IsShown():
# we have a widget
- if shouldShow:
- widget.Show(True)
- self.isShown = True
- else:
- widget.Show(False)
- self.isShown = False
+ # make sure widget shown state is what we want
+ widget.Show (shouldShow)
+ self.isShown = shouldShow
return True
return False
+ def whichAttribute(self):
+ # define the attribute to be used
+ return self.parentBlock.selectedItemsAttribute
+
class StaticTextLabel (DetailSynchronizer, ControlBlocks.StaticText):
def staticTextLabelValue (self, item):
""" Override to provide the value of the static text label """
@@ -164,12 +182,7 @@
"""
return item.itsKind.displayName
-class Headline (StaticTextLabel):
- """Headline, or Title field of the Content Item, as static text"""
- def staticTextLabelValue (self, item):
- return item.about
-
-class StaticTextAttribute(StaticTextLabel):
+class StaticRedirectAttribute (StaticTextLabel):
"""
Static Text that displays the name of the selected item's Attribute
"""
@@ -181,11 +194,7 @@
redirectAttr = ' ' + redirectAttr + ': '
return redirectAttr
- def whichAttribute(self):
- # define the attribute to be used
- return self.parentBlock.selectedItemsAttribute
-
-class LabeledTextAttributeBlock(ControlBlocks.ContentItemDetail):
+class LabeledTextAttributeBlock (ControlBlocks.ContentItemDetail):
def synchronizeItemDetail(self, item):
whichAttr = self.selectedItemsAttribute
try:
@@ -195,6 +204,18 @@
self.isShown = item.hasAttributeAspect(whichAttr, 'redirectTo')
self.synchronizeWidget()
+class MailMessageBlock (DetailSynchronizer, ControlBlocks.ContentItemDetail):
+ """
+ A block whose contents are shown only when the item is a Mail Message.
+ """
+ def synchronizeItemDetail(self, item):
+ mailKind = Mail.MailParcel.getMailMessageKind ()
+ try:
+ shouldShow = item.itsKind.isKindOf (mailKind)
+ except AttributeError:
+ shouldShow = False
+ return self.show(shouldShow)
+
class MarkupBar (DetailSynchronizer, DynamicContainerBlocks.Toolbar):
"""
Markup Toolbar, for quick control over Items.
@@ -301,9 +322,7 @@
def instantiateWidget (self):
widget = super (EditTextAttribute, self).instantiateWidget()
# We need to save off the changed widget's data into the block periodically
- # Currently looks like OnLoseFocus is not getting called every time we lose focus,
- # only when focus moves to another EditText block.
- widget.Bind(wx.EVT_KEY_UP, self.onKeyUp)
+ # Hopefully OnLoseFocus is getting called every time we lose focus.
widget.Bind(wx.EVT_KILL_FOCUS, self.onLoseFocus)
return widget
@@ -358,10 +377,7 @@
def loadAttributeIntoWidget (self, item, widget):
if item.hasAttributeValue("body"):
# get the character string out of the Text LOB
- noteBody = item.body
- if isinstance(noteBody, XMLRepositoryView.XMLText):
- # Read the unicode stream from the XML
- noteBody = noteBody.getInputStream().read()
+ noteBody = item.ItemBodyString ()
widget.SetValue(noteBody)
else:
widget.Clear()
@@ -372,29 +388,36 @@
"""
def saveAttributeFromWidget(self, item, widget):
toFieldString = widget.GetValue()
- # DLDTBD - need to parse the string and lookup the contacts
- # because it's really the contacts that are stored in the "who" attribute!
-
+
+ # get the user's addresses into a list
+ addresses = toFieldString.split(',')
+
+ # get all known addresses
+ addressKind = Mail.MailParcel.getEmailAddressKind()
+ knownAddresses = Query.KindQuery().run([addressKind])
+
+ # for each address, strip white space, and match with existing
+ addressList = []
+ for address in addresses:
+ address.strip()
+ if '.' in address and '@' in address:
+ for candidate in knownAddresses:
+ if candidate.emailAddress == address:
+ # found an existing address!
+ addressList.append(candidate)
+ break
+ else:
+ # make a new EmailAddress
+ newAddress = Mail.EmailAddress()
+ newAddress.emailAddress = address
+ addressList.append(newAddress)
+
+ # reassign the list to the attribute
+ item.who = addressList
+
def loadAttributeIntoWidget (self, item, widget):
- try:
- whoContacts = item.who # get redirected who list
- except AttributeError:
- widget.SetValue('')
- return
- try:
- numContacts = len(whoContacts)
- except TypeError:
- numContacts = 0
- if numContacts > 0:
- whoNames = []
- for whom in whoContacts.values():
- whoNames.append(whom.getItemDisplayName())
- whoString = ', '.join(whoNames)
- else:
- whoString = ''
- if isinstance(whoContacts, Contacts.ContactName):
- whoString = whoContacts.firstName + ' ' + whoContacts.lastName
- widget.SetValue(whoString)
+ whoString = item.ItemWhoString ()
+ widget.SetValue (whoString)
class FromEditField (EditTextAttribute):
"""Edit field containing the sender's contact"""
@@ -403,3 +426,19 @@
def loadAttributeIntoWidget(self, item, widget):
pass
+class EditRedirectAttribute (EditTextAttribute):
+ """
+ An attribute-based edit field
+ Our parent block knows which attribute we edit.
+ """
+ def saveAttributeFromWidget(self, item, widget):
+ item.setAttributeValue(self.whichAttribute(), widget.GetValue())
+
+ def loadAttributeIntoWidget(self, item, widget):
+ try:
+ value = item.getAttributeValue(self.whichAttribute())
+ except AttributeError:
+ value = ''
+ widget.SetValue(value)
+
+
Index: chandler/parcels/osaf/framework/blocks/detail/parcel.xml
diff -u chandler/parcels/osaf/framework/blocks/detail/parcel.xml:1.17 chandler/parcels/osaf/framework/blocks/detail/parcel.xml:1.18
--- chandler/parcels/osaf/framework/blocks/detail/parcel.xml:1.17 Mon Aug 9 17:52:25 2004
+++ chandler/parcels/osaf/framework/blocks/detail/parcel.xml Wed Aug 11 06:33:13 2004
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.17 $ -->
-<!-- $Date: 2004/08/10 00:52:25 $ -->
+<!-- $Revision: 1.18 $ -->
+<!-- $Date: 2004/08/11 13:33:13 $ -->
<!-- Copyright (c) 2003 Open Source Applications Foundation -->
<!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
@@ -57,6 +57,12 @@
<dispatchToBlock itemref="doc:MarkupBar1"/>
</BlockEvent>
+ <BlockEvent itemName="SendMailMessage">
+ <dispatchEnum>SendToBlock</dispatchEnum>
+ <methodName>onSendMailMessageEvent</methodName>
+ <dispatchToBlock itemref="doc:DetailRoot"/>
+ </BlockEvent>
+
<!--
Layout blocks
-->
@@ -65,6 +71,7 @@
<SelectionContainer itemName="DetailRoot"
itemClass="osaf.framework.blocks.detail.Detail.DetailRoot">
<childrenBlocks itemref="doc:DetailTrunk"/>
+ <subscribeWhenVisibleEvents itemref="doc:SendMailMessage"/>
</SelectionContainer>
<ContentItemDetail itemName="DetailTrunk">
@@ -73,12 +80,12 @@
<childrenBlocks itemref="doc:FromAndToArea"/>
<childrenBlocks itemref="doc:CoreIndent"/>
<childrenBlocks itemref="doc:NotesArea"/>
+ <childrenBlocks itemref="doc:SendBar"/>
<!-- Attributes -->
<orientationEnum>Vertical</orientationEnum>
<size>80,20</size>
<minimumSize>80,40</minimumSize>
<eventBoundary>True</eventBoundary>
- <isShown>False</isShown>
</ContentItemDetail>
<!-- MarkupBar -->
@@ -108,7 +115,6 @@
<separatorWidth>50</separatorWidth>
<subscribeWhenVisibleEvents itemref="doc:DummyEvent"/>
<subscribeWhenVisibleEvents itemref="doc:ButtonPressed"/>
- <isShown>False</isShown>
</Toolbar>
<!--
@@ -303,7 +309,6 @@
<childrenBlocks itemref="doc:ToArea"/>
<!-- Attributes -->
<orientationEnum>Vertical</orientationEnum>
- <isShown>False</isShown>
</ContentItemDetail>
<ContentItemDetail itsName="FromArea"
@@ -313,17 +318,15 @@
<!-- Attributes -->
<orientationEnum>Horizontal</orientationEnum>
<selectedItemsAttribute>whoFrom</selectedItemsAttribute>
- <isShown>False</isShown>
</ContentItemDetail>
<StaticText itsName="FromString"
- itemClass="osaf.framework.blocks.detail.Detail.StaticTextAttribute">
+ itemClass="osaf.framework.blocks.detail.Detail.StaticRedirectAttribute">
<title>From: </title>
<characterStyle itemref="doc:LabelStyle"/>
<textAlignmentEnum>Left</textAlignmentEnum>
<stretchFactor>0.0</stretchFactor>
<minimumSize>80, 24</minimumSize>
- <isShown>False</isShown>
</StaticText>
<EditText itsName="FromEditField1"
@@ -334,7 +337,6 @@
<readOnly>True</readOnly>
<textAlignmentEnum>Left</textAlignmentEnum>
<minimumSize>80, 24</minimumSize>
- <isShown>False</isShown>
</EditText>
<ContentItemDetail itsName="ToArea"
@@ -344,17 +346,15 @@
<!-- Attributes -->
<orientationEnum>Horizontal</orientationEnum>
<selectedItemsAttribute>who</selectedItemsAttribute>
- <isShown>False</isShown>
</ContentItemDetail>
<StaticText itsName="ToString"
- itemClass="osaf.framework.blocks.detail.Detail.StaticTextAttribute">
+ itemClass="osaf.framework.blocks.detail.Detail.StaticRedirectAttribute">
<title>To: </title>
<characterStyle itemref="doc:LabelStyle"/>
<textAlignmentEnum>Left</textAlignmentEnum>
<stretchFactor>0.0</stretchFactor>
<minimumSize>80, 24</minimumSize>
- <isShown>False</isShown>
</StaticText>
<EditText itsName="ToEditField1"
@@ -362,10 +362,9 @@
<characterStyle itemref="doc:TextStyle"/>
<lineStyleEnum>MultiLine</lineStyleEnum>
<textStyleEnum>PlainText</textStyleEnum>
- <readOnly>True</readOnly>
+ <readOnly>False</readOnly>
<textAlignmentEnum>Left</textAlignmentEnum>
<minimumSize>80, 24</minimumSize>
- <isShown>False</isShown>
</EditText>
<!-- CoreIndent -->
@@ -375,32 +374,28 @@
<childrenBlocks itemref="doc:Indent2"/>
<!-- Attributes -->
<stretchFactor>2</stretchFactor>
- <isShown>False</isShown>
</ContentItemDetail>
<ContentItemDetail itsName="Indent">
<!-- Attributes -->
<size>80,80</size>
<stretchFactor>0</stretchFactor>
- <isShown>False</isShown>
</ContentItemDetail>
<ContentItemDetail itsName="Indent2">
<!-- Attributes -->
<size>80,80</size>
<stretchFactor>0</stretchFactor>
- <isShown>False</isShown>
</ContentItemDetail>
<!-- CoreArea -->
<ContentItemDetail itsName="CoreArea">
<childrenBlocks itemref="doc:KindLabel"/>
- <childrenBlocks itemref="doc:Headline"/>
+ <childrenBlocks itemref="doc:HeadlineArea"/>
<childrenBlocks itemref="doc:DateTime"/>
<!-- Attributes -->
<orientationEnum>Vertical</orientationEnum>
<stretchFactor>2</stretchFactor>
- <isShown>False</isShown>
</ContentItemDetail>
<StaticText itsName="KindLabel"
@@ -410,19 +405,39 @@
<textAlignmentEnum>Center</textAlignmentEnum>
<stretchFactor>0.0</stretchFactor>
<minimumSize>80, 24</minimumSize>
- <isShown>False</isShown>
</StaticText>
- <StaticText itsName="Headline"
- itemClass="osaf.framework.blocks.detail.Detail.Headline">
- <title>Core</title>
+ <ContentItemDetail itsName="HeadlineArea"
+ itemClass="osaf.framework.blocks.detail.Detail.LabeledTextAttributeBlock">
+ <childrenBlocks itemref="doc:StaticHeadline"/>
+ <childrenBlocks itemref="doc:EditHeadline"/>
+ <!-- Attributes -->
+ <orientationEnum>Horizontal</orientationEnum>
+ <selectedItemsAttribute>about</selectedItemsAttribute>
+ <minimumSize>380, 24</minimumSize>
+ <stretchFactor>0.0</stretchFactor>
+ </ContentItemDetail>
+
+ <StaticText itsName="StaticHeadline"
+ itemClass="osaf.framework.blocks.detail.Detail.StaticRedirectAttribute">
+ <title>Subject</title>
<characterStyle itemref="doc:LabelStyle"/>
<textAlignmentEnum>Center</textAlignmentEnum>
<stretchFactor>0.0</stretchFactor>
<minimumSize>80, 24</minimumSize>
- <isShown>False</isShown>
</StaticText>
+ <EditText itsName="EditHeadline"
+ itemClass="osaf.framework.blocks.detail.Detail.EditRedirectAttribute">
+ <characterStyle itemref="doc:TextStyle"/>
+ <lineStyleEnum>SingleLine</lineStyleEnum>
+ <textStyleEnum>PlainText</textStyleEnum>
+ <readOnly>False</readOnly>
+ <textAlignmentEnum>Left</textAlignmentEnum>
+ <stretchFactor>0.0</stretchFactor>
+ <minimumSize>280, 24</minimumSize>
+ </EditText>
+
<StaticText itsName="DateTime"
itemClass="osaf.framework.blocks.detail.Detail.DateTimeBlock">
<title>Date/Time</title>
@@ -430,7 +445,6 @@
<textAlignmentEnum>Center</textAlignmentEnum>
<stretchFactor>0.0</stretchFactor>
<minimumSize>80, 24</minimumSize>
- <isShown>False</isShown>
</StaticText>
<!-- NotesArea -->
@@ -441,9 +455,46 @@
<textStyleEnum>RichText</textStyleEnum>
<readOnly>False</readOnly>
<textAlignmentEnum>Left</textAlignmentEnum>
- <stretchFactor>1</stretchFactor>
+ <stretchFactor>3</stretchFactor>
<minimumSize>380, 120</minimumSize>
- <isShown>False</isShown>
</EditText>
+ <!-- Send Bar -->
+ <ContentItemDetail itsName="SendBar"
+ itemClass="osaf.framework.blocks.detail.Detail.MailMessageBlock">
+ <childrenBlocks itemref="doc:NotifyRadioBox"/>
+ <childrenBlocks itemref="doc:SendButton"/>
+ <!-- Attributes -->
+ <minimumSize>300,40</minimumSize>
+ <stretchFactor>1</stretchFactor>
+ <orientationEnum>Horizontal</orientationEnum>
+ </ContentItemDetail>
+
+ <RadioBox itsName="NotifyRadioBox">
+ <!-- Attributes -->
+ <title>Notify</title>
+ <choices>All</choices>
+ <choices>New</choices>
+ <radioAlignEnum>Across</radioAlignEnum>
+ <itemsPerLine>2</itemsPerLine>
+
+ <size>200,24</size>
+ <minimumSize>200,30</minimumSize>
+ <border>2.0, 2.0, 2.0, 2.0</border>
+ <stretchFactor>0.0</stretchFactor>
+ </RadioBox>
+
+ <Button itsName="SendButton">
+ <!-- Attributes -->
+ <title>Send</title>
+ <buttonKind>Text</buttonKind>
+
+ <size>60,30</size>
+ <minimumSize>60,30</minimumSize>
+ <border>2.0, 2.0, 2.0, 2.0</border>
+ <event itemref="doc:SendMailMessage"/>
+ <alignmentEnum>alignCenter</alignmentEnum>
+ <stretchFactor>0.0</stretchFactor>
+ </Button>
+
</core:Parcel>
Index: chandler/parcels/osaf/views/content/parcel.xml
diff -u chandler/parcels/osaf/views/content/parcel.xml:1.57 chandler/parcels/osaf/views/content/parcel.xml:1.58
--- chandler/parcels/osaf/views/content/parcel.xml:1.57 Fri Aug 6 17:08:12 2004
+++ chandler/parcels/osaf/views/content/parcel.xml Wed Aug 11 06:33:14 2004
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.57 $ -->
-<!-- $Date: 2004/08/07 00:08:12 $ -->
+<!-- $Revision: 1.58 $ -->
+<!-- $Date: 2004/08/11 13:33:14 $ -->
<!-- Copyright (c) 2004 Open Source Applications Foundation -->
<!-- License: http://osafoundation.org/Chandler_0.1_license_terms.htm -->
@@ -17,6 +17,7 @@
xmlns:contactsModel="http://osafoundation.org/parcels/osaf/contentmodel/contacts"
xmlns:detail="http://osafoundation.org/parcels/osaf/framework/blocks/detail"
xmlns:view="http://osafoundation.org/parcels/osaf/views/content"
+ xmlns:main="http://osafoundation.org/parcels/osaf/views/main"
xmlns:events="http://osafoundation.org/parcels/osaf/framework/blocks/Events">
<core:version>0.3</core:version>
@@ -33,6 +34,7 @@
<contentModel:Query itsName="notesQuery">
<data itemref="contentModel:Note"/>
+ <exactKind>True</exactKind>
</contentModel:Query>
<contentModel:NamedCollection itsName="notesItemCollection">
@@ -86,6 +88,11 @@
<rule itemref="view:untitledQuery"/>
</contentModel:NamedCollection>
+ <contentModel:NamedCollection itsName="allItemCollection">
+ <displayName>All</displayName>
+ <rule itemref="view:mixedQuery"/>
+ </contentModel:NamedCollection>
+
<contentModel:Query itsName="inQuery">
<data itemref="mailModel:MailMessage"/>
</contentModel:Query>
@@ -96,6 +103,7 @@
</contentModel:NamedCollection>
<contentModel:Query itsName="outQuery">
+ <data itemref="mailModel:MailMessage"/>
</contentModel:Query>
<contentModel:NamedCollection itsName="outItemCollection">
@@ -175,8 +183,32 @@
<columnWidths>170</columnWidths>
</List>
+ <!-- All Summary View -->
+ <BoxContainer itsName="AllSummary">
+ <childrenBlocks itemref="main:LayoutSelector" copy="LayoutSelector"/>
+ <childrenBlocks itemref="view:AllTable"/>
+ <orientationEnum>Vertical</orientationEnum>
+ </BoxContainer>
+
+ <!-- All Table -->
+ <Table itsName="AllTable">
+ <contents itemref="view:allItemCollection"/>
+
+ <columnHeadings>who</columnHeadings>
+ <columnHeadings>about</columnHeadings>
+ <columnHeadings>date</columnHeadings>
+
+ <columnAttributeNames>who</columnAttributeNames>
+ <columnAttributeNames>about</columnAttributeNames>
+ <columnAttributeNames>date</columnAttributeNames>
+
+ <columnWidths>270</columnWidths>
+ <columnWidths>150</columnWidths>
+ <columnWidths>170</columnWidths>
+ </Table>
+
<BoxContainer itsName="InSummary">
- <childrenBlocks itemref="view:LayoutSelector3"/>
+ <childrenBlocks itemref="main:LayoutSelector" copy="LayoutSelector"/>
<childrenBlocks itemref="view:InTable"/>
<orientationEnum>Vertical</orientationEnum>
</BoxContainer>
@@ -199,7 +231,7 @@
</Table>
<BoxContainer itsName="OutSummary">
- <childrenBlocks itemref="view:LayoutSelector2"/>
+ <childrenBlocks itemref="main:LayoutSelector" copy="LayoutSelector"/>
<childrenBlocks itemref="view:OutTable"/>
<orientationEnum>Vertical</orientationEnum>
</BoxContainer>
@@ -222,7 +254,7 @@
</Table>
<ChoiceContainer itsName="CalendarSummary">
- <childrenBlocks itemref="view:LayoutSelector1"/>
+ <childrenBlocks itemref="main:LayoutSelector" copy="LayoutSelector"/>
<choices itemref="view:CalendarTable"/>
<choices itemref="view:SummaryMonth"/>
<choices itemref="view:SummaryWeek"/>
@@ -316,7 +348,7 @@
</Table>
<BoxContainer itsName="JunkSummary">
- <childrenBlocks itemref="view:LayoutSelector5"/>
+ <childrenBlocks itemref="main:LayoutSelector" copy="LayoutSelector"/>
<childrenBlocks itemref="view:JunkTable"/>
<orientationEnum>Vertical</orientationEnum>
</BoxContainer>
@@ -339,7 +371,7 @@
</Table>
<BoxContainer itsName="TrashSummary">
- <childrenBlocks itemref="view:LayoutSelector6"/>
+ <childrenBlocks itemref="main:LayoutSelector" copy="LayoutSelector"/>
<childrenBlocks itemref="view:TrashTable"/>
<orientationEnum>Vertical</orientationEnum>
</BoxContainer>
@@ -363,7 +395,7 @@
<!-- Untitled Summary -->
<BoxContainer itsName="UntitledSummary">
- <childrenBlocks itemref="view:LayoutSelector7"/>
+ <childrenBlocks itemref="main:LayoutSelector" copy="LayoutSelector"/>
<childrenBlocks itemref="view:UntitledTable"/>
<orientationEnum>Vertical</orientationEnum>
</BoxContainer>
@@ -413,393 +445,6 @@
itemClass="osaf.views.content.Content.ContentItemDetail">
</ItemDetail>
- <!-- LayoutSelector1 -->
- <Toolbar itemName="LayoutSelector1">
- <blockName>LayoutSelector1</blockName>
- <childrenBlocks itemref="view:ListViewButton1"/>
- <childrenBlocks itemref="view:MonthViewButton1"/>
- <childrenBlocks itemref="view:WeekViewButton1"/>
- <childrenBlocks itemref="view:DayViewButton1"/>
- <!-- Attributes -->
- <colorStyle itemref="detail:GrayBackground3"/>
- <toolSize>16,16</toolSize>
- <separatorWidth>100</separatorWidth>
- <stretchFactor>0.0</stretchFactor>
- <subscribeWhenVisibleEvents itemref="view:SelectionChanged"/>
- </Toolbar>
-
- <!-- LayoutSelector2 -->
- <Toolbar itemName="LayoutSelector2">
- <blockName>LayoutSelector2</blockName>
- <childrenBlocks itemref="view:ListViewButton2"/>
- <childrenBlocks itemref="view:MonthViewButton2"/>
- <childrenBlocks itemref="view:WeekViewButton2"/>
- <childrenBlocks itemref="view:DayViewButton2"/>
- <!-- Attributes -->
- <colorStyle itemref="detail:GrayBackground3"/>
- <toolSize>16,16</toolSize>
- <separatorWidth>100</separatorWidth>
- <stretchFactor>0.0</stretchFactor>
- <subscribeWhenVisibleEvents itemref="view:SelectionChanged"/>
- </Toolbar>
-
- <!-- LayoutSelector3 -->
- <Toolbar itemName="LayoutSelector3">
- <blockName>LayoutSelector3</blockName>
- <childrenBlocks itemref="view:ListViewButton3"/>
- <childrenBlocks itemref="view:MonthViewButton3"/>
- <childrenBlocks itemref="view:WeekViewButton3"/>
- <childrenBlocks itemref="view:DayViewButton3"/>
- <!-- Attributes -->
- <colorStyle itemref="detail:GrayBackground3"/>
- <toolSize>16,16</toolSize>
- <separatorWidth>100</separatorWidth>
- <stretchFactor>0.0</stretchFactor>
- <subscribeWhenVisibleEvents itemref="view:SelectionChanged"/>
- </Toolbar>
-
- <!-- LayoutSelector5 -->
- <Toolbar itemName="LayoutSelector5">
- <blockName>LayoutSelector5</blockName>
- <childrenBlocks itemref="view:ListViewButton5"/>
- <childrenBlocks itemref="view:MonthViewButton5"/>
- <childrenBlocks itemref="view:WeekViewButton5"/>
- <childrenBlocks itemref="view:DayViewButton5"/>
- <!-- Attributes -->
- <colorStyle itemref="detail:GrayBackground3"/>
- <toolSize>16,16</toolSize>
- <separatorWidth>100</separatorWidth>
- <stretchFactor>0.0</stretchFactor>
- <subscribeWhenVisibleEvents itemref="view:SelectionChanged"/>
- </Toolbar>
-
- <!-- LayoutSelector6 -->
- <Toolbar itemName="LayoutSelector6">
- <blockName>LayoutSelector6</blockName>
- <childrenBlocks itemref="view:ListViewButton6"/>
- <childrenBlocks itemref="view:MonthViewButton6"/>
- <childrenBlocks itemref="view:WeekViewButton6"/>
- <childrenBlocks itemref="view:DayViewButton6"/>
- <!-- Attributes -->
- <colorStyle itemref="detail:GrayBackground3"/>
- <toolSize>16,16</toolSize>
- <separatorWidth>100</separatorWidth>
- <stretchFactor>0.0</stretchFactor>
- <subscribeWhenVisibleEvents itemref="view:SelectionChanged"/>
- </Toolbar>
-
- <!-- LayoutSelector7 -->
- <Toolbar itemName="LayoutSelector7">
- <blockName>LayoutSelector7</blockName>
- <childrenBlocks itemref="view:ListViewButton7"/>
- <childrenBlocks itemref="view:MonthViewButton7"/>
- <childrenBlocks itemref="view:WeekViewButton7"/>
- <childrenBlocks itemref="view:DayViewButton7"/>
- <!-- Attributes -->
- <colorStyle itemref="detail:GrayBackground3"/>
- <toolSize>16,16</toolSize>
- <separatorWidth>100</separatorWidth>
- <stretchFactor>0.0</stretchFactor>
- <subscribeWhenVisibleEvents itemref="view:SelectionChanged"/>
- </Toolbar>
-
- <BlockEvent itemName="SelectionChanged">
- <dispatchEnum>SendToBlock</dispatchEnum>
- <methodName>onSelectionChanged</methodName>
- <dispatchToBlock itemref="view:CalendarSummary"/>
- </BlockEvent>
-
- <!--
- ToolbarItems
- -->
- <ToolbarItem itsName="ListViewButton1">
- <blockName>ListViewButton1</blockName>
- <location>LayoutSelector1</location>
- <dynamicParent itemref="view:LayoutSelector1"/>
- <title>List View</title>
- <bitmap>application/images/list.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in list mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="MonthViewButton1">
- <blockName>MonthViewButton1</blockName>
- <location>LayoutSelector1</location>
- <dynamicParent itemref="view:LayoutSelector1"/>
- <title>Month View</title>
- <bitmap>application/images/month.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in month mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="WeekViewButton1">
- <blockName>WeekViewButton1</blockName>
- <location>LayoutSelector1</location>
- <dynamicParent itemref="view:LayoutSelector1"/>
- <title>Week View</title>
- <bitmap>application/images/week.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in week mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="DayViewButton1">
- <blockName>DayViewButton1</blockName>
- <location>LayoutSelector1</location>
- <dynamicParent itemref="view:LayoutSelector1"/>
- <title>Day View</title>
- <bitmap>application/images/day.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in day mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="ListViewButton2">
- <blockName>ListViewButton2</blockName>
- <location>LayoutSelector2</location>
- <dynamicParent itemref="view:LayoutSelector2"/>
- <title>List View</title>
- <bitmap>application/images/list.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in list mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="MonthViewButton2">
- <blockName>MonthViewButton2</blockName>
- <location>LayoutSelector2</location>
- <dynamicParent itemref="view:LayoutSelector2"/>
- <title>Month View</title>
- <bitmap>application/images/month.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in month mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="WeekViewButton2">
- <blockName>WeekViewButton2</blockName>
- <location>LayoutSelector2</location>
- <dynamicParent itemref="view:LayoutSelector2"/>
- <title>Week View</title>
- <bitmap>application/images/week.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in week mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="DayViewButton2">
- <blockName>DayViewButton2</blockName>
- <location>LayoutSelector2</location>
- <dynamicParent itemref="view:LayoutSelector2"/>
- <title>Day View</title>
- <bitmap>application/images/day.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in day mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="ListViewButton3">
- <blockName>ListViewButton3</blockName>
- <location>LayoutSelector3</location>
- <dynamicParent itemref="view:LayoutSelector3"/>
- <title>List View</title>
- <bitmap>application/images/list.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in list mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="MonthViewButton3">
- <blockName>MonthViewButton3</blockName>
- <location>LayoutSelector3</location>
- <dynamicParent itemref="view:LayoutSelector3"/>
- <title>Month View</title>
- <bitmap>application/images/month.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in month mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="WeekViewButton3">
- <blockName>WeekViewButton3</blockName>
- <location>LayoutSelector3</location>
- <dynamicParent itemref="view:LayoutSelector3"/>
- <title>Week View</title>
- <bitmap>application/images/week.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in week mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="DayViewButton3">
- <blockName>DayViewButton3</blockName>
- <location>LayoutSelector3</location>
- <dynamicParent itemref="view:LayoutSelector3"/>
- <title>Day View</title>
- <bitmap>application/images/day.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in day mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="ListViewButton5">
- <blockName>ListViewButton5</blockName>
- <location>LayoutSelector5</location>
- <dynamicParent itemref="view:LayoutSelector5"/>
- <title>List View</title>
- <bitmap>application/images/list.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in list mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="MonthViewButton5">
- <blockName>MonthViewButton5</blockName>
- <location>LayoutSelector5</location>
- <dynamicParent itemref="view:LayoutSelector5"/>
- <title>Month View</title>
- <bitmap>application/images/month.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in month mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="WeekViewButton5">
- <blockName>WeekViewButton5</blockName>
- <location>LayoutSelector5</location>
- <dynamicParent itemref="view:LayoutSelector5"/>
- <title>Week View</title>
- <bitmap>application/images/week.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in week mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="DayViewButton5">
- <blockName>DayViewButton5</blockName>
- <location>LayoutSelector5</location>
- <dynamicParent itemref="view:LayoutSelector5"/>
- <title>Day View</title>
- <bitmap>application/images/day.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in day mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="ListViewButton6">
- <blockName>ListViewButton6</blockName>
- <location>LayoutSelector6</location>
- <dynamicParent itemref="view:LayoutSelector6"/>
- <title>List View</title>
- <bitmap>application/images/list.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in list mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="MonthViewButton6">
- <blockName>MonthViewButton6</blockName>
- <location>LayoutSelector6</location>
- <dynamicParent itemref="view:LayoutSelector6"/>
- <title>Month View</title>
- <bitmap>application/images/month.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in month mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="WeekViewButton6">
- <blockName>WeekViewButton6</blockName>
- <location>LayoutSelector6</location>
- <dynamicParent itemref="view:LayoutSelector6"/>
- <title>Week View</title>
- <bitmap>application/images/week.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in week mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="DayViewButton6">
- <blockName>DayViewButton6</blockName>
- <location>LayoutSelector6</location>
- <dynamicParent itemref="view:LayoutSelector6"/>
- <title>Day View</title>
- <bitmap>application/images/day.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in day mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="ListViewButton7">
- <blockName>ListViewButton7</blockName>
- <location>LayoutSelector7</location>
- <dynamicParent itemref="view:LayoutSelector7"/>
- <title>List View</title>
- <bitmap>application/images/list.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in list mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="MonthViewButton7">
- <blockName>MonthViewButton7</blockName>
- <location>LayoutSelector7</location>
- <dynamicParent itemref="view:LayoutSelector7"/>
- <title>Month View</title>
- <bitmap>application/images/month.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in month mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="WeekViewButton7">
- <blockName>WeekViewButton7</blockName>
- <location>LayoutSelector7</location>
- <dynamicParent itemref="view:LayoutSelector7"/>
- <title>Week View</title>
- <bitmap>application/images/week.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in week mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
- <ToolbarItem itsName="DayViewButton7">
- <blockName>DayViewButton7</blockName>
- <location>LayoutSelector7</location>
- <dynamicParent itemref="view:LayoutSelector7"/>
- <title>Day View</title>
- <bitmap>application/images/day.png</bitmap>
- <selectedBitmap></selectedBitmap>
- <toolbarItemKind>Radio</toolbarItemKind>
- <helpString>Display the view in day mode</helpString>
- <event itemref="view:SelectionChanged"/>
- </ToolbarItem>
-
<!-- Note View -->
<SplitterWindow itsName="NoteTableView">
<contents itemref="view:notesItemCollection"/>
@@ -847,6 +492,18 @@
<border>1.0, 1.0, 1.0, 1.0</border>
</SplitterWindow>
+ <!-- All View -->
+ <SplitterWindow itsName="AllTableView">
+ <contents itemref="view:allItemCollection"/>
+
+ <childrenBlocks itemref="view:AllSummary"/>
+ <childrenBlocks itemref="detail:DetailRoot" copy="DetailRoot"/>
+
+ <eventBoundary>True</eventBoundary>
+ <border>1.0, 1.0, 1.0, 1.0</border>
+ <splitPercentage>0.4</splitPercentage>
+ </SplitterWindow>
+
<!-- In View -->
<SplitterWindow itsName="InTableView">
<contents itemref="view:inItemCollection"/>
More information about the Commits
mailing list