[Dev] Re: [commits] (olivier) [6283] Some new block accessors for CPIA script

John Anderson john at osafoundation.org
Sat Jul 30 08:03:33 PDT 2005


Hi Donn:

Most of these issues are a matter of opinion and don't have a clear 
right or wrong. I'm probably more of a minimalist than most and so I 
tend to prefer the simplest solutions, only embellishing them when clear 
needs present itself, which is why I probably wouldn't add the extra 
redundent routines until the need arose -- but that's only one opinion 
and I'm not always right.

However, I do agree with PJE, that internal names should be the same as 
end-user names whenever possible, which minimizes confusion for both 
programmers and end users.

Donn Denman wrote:

> John,
>
> Actually, all those functions you're commenting on were there before 
> Olivier's commit - so I'll take the action items to address the 
> issues.  BTW, the generic implementations that you suggest, like 
> BlockNamed, are already there (it's called FindNamedBlock), so we 
> don't *have* to add new access functions for each new block.  
>
> Why have both the generic and specific block lookup functions?  When 
> using the specific ones the scripter is insulated from the anticipated 
> cleanup of block names that you're describing - we can just update the 
> single function that all the scripts are calling.  That may not be a 
> compelling argument, since there's not a lot of script code written 
> yet.  :-) But I think the bigger issue is a matter of philosophy - 
> should scripts use the end-user term for an item, or the internal 
> term?  I've been leaning towards supporting the end-user term, since 
> people who know the internals can always use our standard python 
> idioms to access the internal items as we're used to doing.  
>
> Phillipe (PJE) has been arguing that the internal terms /should be the 
> same as/ the end-user terms.  It sounds like you agree.  Now that 
> we're exposing a lot more of the internals, it's time to review and 
> update those terms.   I'll take an action item to drive this process 
> where the details of CPIA Script are concerned.
>
> - Donn
>
> On Jul 29, 2005, at 2:00 PM, John Anderson wrote:
>
>> Hi Oliver:
>>
>> I'd probably prefer a scripting function, e.g. BlockNamed 
>> (nameArgument), to hard coding methods for each name. If we did this 
>> instead, we wouldn't have to add a method each time we have a block 
>> with a new name, which makes it more extensible and gets rid of a 
>> bunch of code. If you're concerned that this wouldn't work because 
>> the current names are too confusing, I'd rename the blocks to use 
>> better names.
>>
>> Also, I'd probably change some of the functions to make them less 
>> Chandler specific and more general so they work with future Chandler 
>> extensions or non-Chandler CPIA apps, e.g. StampAsXXX, StampAsYYY, 
>> StampAsZZZ, should be StampAs (typeArgument).
>>
>> John
>>
>> commits at osafoundation.org wrote:
>>
>>> Revision
>>>     6283 <http://viewcvs.osafoundation.org/chandler?view=rev&rev=6283>
>>> Author
>>>     olivier
>>> Date
>>>     2005-07-29 13:29:13 -0700 (Fri, 29 Jul 2005)
>>>
>>>
>>>       Log Message
>>>
>>>Some new block accessors for CPIA script
>>>
>>>
>>>       Modified Paths
>>>
>>>     * trunk/chandler/parcels/osaf/framework/scripting/CPIAScript.py
>>>       <#trunkchandlerparcelsosafframeworkscriptingCPIAScriptpy>
>>>     * trunk/chandler/parcels/osaf/framework/scripting/ScriptingGlobalFunctions.py
>>>       <#trunkchandlerparcelsosafframeworkscriptingScriptingGlobalFunctionspy>
>>>
>>>
>>>       Diff
>>>
>>>
>>>         Modified:
>>>         trunk/chandler/parcels/osaf/framework/scripting/CPIAScript.py
>>>         (6282 => 6283)
>>>
>>>--- trunk/chandler/parcels/osaf/framework/scripting/CPIAScript.py       2005-07-29 20:22:03 UTC (rev 6282)
>>>+++ trunk/chandler/parcels/osaf/framework/scripting/CPIAScript.py       2005-07-29 20:29:13 UTC (rev 6283)
>>>@@ -13,6 +13,7 @@
>>> import ScriptingGlobalFunctions
>>> from application import schema
>>> import wx
>>>+import TestAppLib
>>> 
>>> logger = logging.getLogger('CPIA Script')
>>> logger.setLevel(logging.INFO)
>>>@@ -184,6 +185,7 @@
>>>         # @@@DLD TBD - remove
>>>         reload(ScriptingGlobalFunctions)
>>>         reload(KindShorthand)
>>>+        reload(TestAppLib)
>>> 
>>>         # add all the known BlockEvents as builtin functions
>>>         self._BindCPIAEvents(self.itsView, builtIns)
>>>
>>>
>>>         Modified:
>>>         trunk/chandler/parcels/osaf/framework/scripting/ScriptingGlobalFunctions.py
>>>         (6282 => 6283)
>>>
>>>--- trunk/chandler/parcels/osaf/framework/scripting/ScriptingGlobalFunctions.py 2005-07-29 20:22:03 UTC (rev 6282)
>>>+++ trunk/chandler/parcels/osaf/framework/scripting/ScriptingGlobalFunctions.py 2005-07-29 20:29:13 UTC (rev 6283)
>>>@@ -1,110 +1,130 @@
>>>-__copyright__ = "Copyright (c) 2005 Open Source Applications Foundation"
>>>-__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
>>>-
>>>-""" Provide Scripting Global Functions """
>>>-
>>>-"""
>>>-  NOTE:
>>>-  ----
>>>-  All globals in this file become attributes of the user's script,
>>>-    unless the name starts with an underscore '_'.
>>>-  This includes things that you import here.
>>>-  Hence imports are done into the private name space.
>>>-"""
>>>-import wx as _wx
>>>-import logging as _logging
>>>-import osaf.framework.blocks.Block as _Block
>>>-import application.Globals as _Globals
>>>-from repository.item.Item import Item as _Item
>>>-
>>>-_logger = _logging.getLogger('CPIA Script')
>>>-_logger.setLevel(_logging.INFO)
>>>-
>>>-# Functions that return a named block
>>>-def FindNamedBlock(blockName):
>>>-    block = _Block.Block.findBlockByName(blockName)
>>>-    if not block:
>>>-        _logger.warning("Can't find block named %s" % blockName)
>>>-    return block
>>>-
>>>-def Sidebar():
>>>-    return FindNamedBlock("Sidebar")
>>>-
>>>-def SummaryView():
>>>-    return FindNamedBlock("TableSummaryView")
>>>-
>>>-def CalendarView():
>>>-    return FindNamedBlock("CalendarSummaryView")
>>>-
>>>-def DetailView():
>>>-    return FindNamedBlock("DetailView")
>>>-
>>>-def StartTime():
>>>-    # The Start time edit field of the Detail View
>>>-    return FindNamedBlock("EditCalendarStartTime")
>>>-
>>>-def EndTime():
>>>-    # The End time edit field of the Detail View
>>>-    return FindNamedBlock("EditCalendarEndTime")
>>>-
>>>-"""
>>>-Special functions, including wxWidgets-related operations
>>>-
>>>-All attributes in this file get added to the builtin module
>>>-for script execution, except for ones that start with "_".
>>>-"""
>>>-def Focus(block):
>>>-    # Set the input focus to the given block
>>>-    try:
>>>-        widget = block.widget
>>>-    except AttributeError:
>>>-        _logger.warning("Can't set focus to block %s" % block)
>>>-    else:
>>>-        widget.SetFocus()
>>>-
>>>-def SidebarSelect(itemOrName):
>>>-    """ Select the item in the Sidebar """
>>>-    # can pass in an item or a name
>>>-    if isinstance(itemOrName, Item):
>>>-        params = {'item':itemOrName}
>>>-    else:
>>>-        params = {'itemName':itemOrName}
>>>-    _Globals.mainViewRoot.postEventByName ('RequestSelectSidebarItem', params)
>>>-    Focus(Sidebar())
>>>+__copyright__ = "Copyright (c) 2005 Open Source Applications Foundation"
>>>+__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
>>> 
>>>+""" Provide Scripting Global Functions """
>>>+
>>>+"""
>>>+  NOTE:
>>>+  ----
>>>+  All globals in this file become attributes of the user's script,
>>>+    unless the name starts with an underscore '_'.
>>>+  This includes things that you import here.
>>>+  Hence imports are done into the private name space.
>>>+"""
>>>+import wx as _wx
>>>+import logging as _logging
>>>+import osaf.framework.blocks.Block as _Block
>>>+import application.Globals as _Globals
>>>+from repository.item.Item import Item as _Item
>>>+
>>>+_logger = _logging.getLogger('CPIA Script')
>>>+_logger.setLevel(_logging.INFO)
>>>+
>>>+# Functions that return a named block
>>>+def FindNamedBlock(blockName):
>>>+    block = _Block.Block.findBlockByName(blockName)
>>>+    if not block:
>>>+        _logger.warning("Can't find block named %s" % blockName)
>>>+    return block
>>>+
>>>+def Sidebar():
>>>+    return FindNamedBlock("Sidebar")
>>>+
>>>+def SummaryView():
>>>+    return FindNamedBlock("TableSummaryView")
>>>+
>>>+def CalendarView():
>>>+    return FindNamedBlock("CalendarSummaryView")
>>>+
>>>+def DetailView():
>>>+    return FindNamedBlock("DetailView")
>>>+
>>>+def StartTime():
>>>+    # The Start time edit field of the Detail View
>>>+    return FindNamedBlock("EditCalendarStartTime")
>>>+
>>>+def EndTime():
>>>+    # The End time edit field of the Detail View
>>>+    return FindNamedBlock("EditCalendarEndTime")
>>>+
>>>+def DisplayName():
>>>+    # The Display name block of the Detail View
>>>+    return FindNamedBlock("HeadlineBlock")
>>>+
>>>+def Location():
>>>+    # The Location block of the Detail View
>>>+    return FindNamedBlock("AECalendarLocation")
>>>+
>>>+def StartDate():
>>>+    # The Start date edit field of the Detail View
>>>+    return FindNamedBlock("EditCalendarStartDate")
>>>+
>>>+def EndDate():
>>>+    # The End date edit field of the Detail View
>>>+    return FindNamedBlock("EditCalendarEndDate")
>>>+
>>>+def AllDay():
>>>+    # The Allday block of the Detail View
>>>+    return FindNamedBlock("EditAllDay")
>>>+
>>>+"""
>>>+Special functions, including wxWidgets-related operations
>>>+
>>>+All attributes in this file get added to the builtin module
>>>+for script execution, except for ones that start with "_".
>>>+"""
>>>+def Focus(block):
>>>+    # Set the input focus to the given block
>>>+    try:
>>>+        widget = block.widget
>>>+    except AttributeError:
>>>+        _logger.warning("Can't set focus to block %s" % block)
>>>+    else:
>>>+        widget.SetFocus()
>>>+
>>>+def SidebarSelect(itemOrName):
>>>+    """ Select the item in the Sidebar """
>>>+    # can pass in an item or a name
>>>+    if isinstance(itemOrName, Item):
>>>+        params = {'item':itemOrName}
>>>+    else:
>>>+        params = {'itemName':itemOrName}
>>>+    _Globals.mainViewRoot.postEventByName ('RequestSelectSidebarItem', params)
>>>+    Focus(Sidebar())
>>>+
>>> def SidebarAdd(itemCollection):
>>>     """ Adds the given itemCollection to the sidebar """
>>>     Globals.mainViewRoot.postEventByName ( 'AddToSidebarWithoutCopying', {'items' : [itemCollection]} )
>>>-
>>>-def SummaryViewSelect(item):
>>>-    # Tell the ActiveView to select our item
>>>-    _Globals.mainViewRoot.postEventByName ('SelectItemBroadcastInsideActiveView', {'item':item})
>>>-    Focus(SummaryView())
>>>-
>>>-def StampAsMailMessage():
>>>-    PressStampButton('MailMessageButton')
>>>-
>>>-def StampAsTask():
>>>-    PressStampButton('TaskStamp')
>>>-
>>>-def StampAsCalendarEvent():
>>>-    PressStampButton('CalendarStamp')
>>>-
>>>-def PressStampButton(buttonName):
>>>-    """ Press a Stamp button in the markup bar, by firing its event"""
>>>-    uiView = _wx.GetApp().UIRepositoryView
>>>-    for block in _Block.Block.iterItems(uiView):
>>>-        # Find the live button, by name, and make sure its parent is live too"""
>>>-        try:
>>>-            blockName = block.blockName
>>>-        except AttributeError:
>>>-            continue
>>>-        if blockName == buttonName:
>>>-            if hasattr(block, 'widget') and hasattr(block.dynamicParent, 'widget'):
>>>-                block.post(block.event, {})
>>>-                break
>>>-
>>> 
>>>+def SummaryViewSelect(item):
>>>+    # Tell the ActiveView to select our item
>>>+    _Globals.mainViewRoot.postEventByName ('SelectItemBroadcastInsideActiveView', {'item':item})
>>>+    Focus(SummaryView())
>>>+
>>>+def StampAsMailMessage():
>>>+    PressStampButton('MailMessageButton')
>>>+
>>>+def StampAsTask():
>>>+    PressStampButton('TaskStamp')
>>>+
>>>+def StampAsCalendarEvent():
>>>+    PressStampButton('CalendarStamp')
>>>+
>>>+def PressStampButton(buttonName):
>>>+    """ Press a Stamp button in the markup bar, by firing its event"""
>>>+    uiView = _wx.GetApp().UIRepositoryView
>>>+    for block in _Block.Block.iterItems(uiView):
>>>+        # Find the live button, by name, and make sure its parent is live too"""
>>>+        try:
>>>+            blockName = block.blockName
>>>+        except AttributeError:
>>>+            continue
>>>+        if blockName == buttonName:
>>>+            if hasattr(block, 'widget') and hasattr(block.dynamicParent, 'widget'):
>>>+                block.post(block.event, {})
>>>+                break
>>>+
>>>+
>>> def GetWindow(label):
>>>     """ Returns the window with the given label """
>>>     return _wx.FindWindowByLabel(label)
>>>@@ -128,15 +148,15 @@
>>>             stringSuccess = stringSuccess and charSuccess
>>>     return stringSuccess
>>> 
>>>-    
>>>-"""
>>>-TO BE DONE
>>>-* Type(<string>) function to take the string and tell wx
>>>-    to act like the user typed it in.
>>>-    (Could add modifier flags using optional parameters)
>>>-* Look at Select(item) method on Block, for SummaryView,
>>>-    Sidebar, etc.  I think Table.GotoItem() method or something
>>>-    like that might work.
>>>-* RunScript(<script> | <scriptNameString>) - run a script
>>>-* Click(<location>) should be possible.
>>>-"""
>>>+    
>>>+"""
>>>+TO BE DONE
>>>+* Type(<string>) function to take the string and tell wx
>>>+    to act like the user typed it in.
>>>+    (Could add modifier flags using optional parameters)
>>>+* Look at Select(item) method on Block, for SummaryView,
>>>+    Sidebar, etc.  I think Table.GotoItem() method or something
>>>+    like that might work.
>>>+* RunScript(<script> | <scriptNameString>) - run a script
>>>+* Click(<location>) should be possible.
>>>+"""
>>>
>>>  
>>>
>>>------------------------------------------------------------------------
>>>
>>>_______________________________________________
>>>Commits mailing list
>>>Commits at osafoundation.org
>>>http://lists.osafoundation.org/mailman/listinfo/commits
>>>  
>>>
>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>
>> Open Source Applications Foundation "Dev" mailing list
>> http://lists.osafoundation.org/mailman/listinfo/dev
>>
>
>------------------------------------------------------------------------
>
>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
>Open Source Applications Foundation "Dev" mailing list
>http://lists.osafoundation.org/mailman/listinfo/dev
>  
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osafoundation.org/pipermail/dev/attachments/20050730/ca8f8463/attachment.htm


More information about the Dev mailing list