Hi Jeffrey,
I know you guys are polishing off the branching of Desktop 0.7.3, but if
you have a minute, I have a couple of questions about the scripts below.
Not urgent, but I'm eager to move forward.
I believe I'm (now) installing my plugin without error.
Q1. I made one change to the init.py script in response to a runtime
syntax error that halted Chandler in (my line 42) "for item in". Is my
fix correct?
-------Your code-------
class YourPluginMenuBlock(Block):
# the method name has to be the blockName of the BlockEvent above
# sandwiched with "on" and "Event"
def onActionOnYourPluginEvent(self, event):
for item in
Block.findBlockByName("MainView").getSidebarSelectedCollection():
item_title = item.displayName
# Python's print can't print unicode, encode as utf-8
print item_title.encode('utf-8')
-------My code-------
class AndrePluginMenuBlock(Block):
# the method name has to be the blockName of the BlockEvent above
# sandwiched with "on" and "Event"
def onActionOnAndrePluginEvent(self, event):
for item in
Block.findBlockByName("MainView").getSidebarSelectedCollection():
item_title = item.displayName
# Python's print can't print unicode, encode as utf-8
print item_title.encode('utf-8')
Q2. Might my "fix" be the cause of why I don't see a new menu item in
the File Menu or any other menu?
Thanks much,
Andre
On Mon, 19 Nov 2007 14:12:02 -0800, "Jeffrey Harris"
<[EMAIL PROTECTED]> said:
> Hi Poojan,
>
> Sorry for the slow response.
>
> > I am trying to write a simple Python script which dumps out all items in
> > my Home collection as a text file. (Just the item names as a simple flat
> > list, 1 line per item.) This attempt is related to my wanting to be able
> > to print out a simple list of my items (see
> > http://lists.osafoundation.org/pipermail/chandler-users/2007-October/000822.html).
> >
> > It is my understanding that since Chandler Desktop is written in Python,
> > it is possible to run simple scripts to perform repeated (or desirable)
> > tasks.
> >
> > I've tried to harness the tools->scripting menu item to do
> > this--recording a script of a .ics file dump.
> > However, this seems to record mostly wxWidget calls (including mouse
> > clicks & keyboard presses). Furthermore, dumping as an .ics file isn't
> > exactly what I want. (I would have to post-process the result to get
> > only the item names. I've done this manually before, but there must be
> > a better way.)
>
> There are different possible meanings of the word script. The record
> script functionality you tried is focused on allowing users to repeat
> actions inside Chandler, as you discovered, that isn't going to help you
> with your project. You want to write a Python script that works with
> data in Chandler.
>
> > My first step in this endeavor is to figure out how to get hold of my
> > Home collection's object. Is there a way to get the Python object of a
> > collection by simply knowing its name--or, really, a list of items in
> > the repository that belong to a specific collection?
>
> Here's how to write and install a plugin for Chandler that can access
> your collections (I've written it so it looks at the selected
> collection).
>
> To make this work, you should create a new directory, I'll call it
> YourPlugin. Create a file called setup.py:
>
> ----------
> YourPlugin/setup.py
> ----------
>
> from setuptools import setup
>
> setup(
> name = "YourPlugin",
> version = "0.1",
> packages = ["your_plugin"],
> entry_points = {
> "chandler.parcels": ["YourPlugin package = your_plugin"],
> },
> )
>
> #---------- End of setup.py
>
> Next, create a subdirectory called your_plugin, with a file called
> __init__.py:
>
> ----------
> YourPlugin/your_plugin/__init__.py
> ----------
>
> from application import schema
> from osaf.framework.blocks import BlockEvent, MenuItem
> from osaf.framework.blocks.Block import Block
>
> from i18n import MessageFactory
> # using _ for unicode that will be displayed to users enables localizers
> to
> # change the unicode
> _ = MessageFactory("YourPlugin")
>
> def installParcel(parcel, oldVersion=None):
>
> # find the parent menu for your new menu item
> parentMenu = schema.ns('osaf.views.main', parcel).FileMenu
>
> # the code that should handle events when your menu item is chosen
> handler = YourPluginMenuBlock.update(parcel, None,
> blockName='YourPluginMenuHandler')
>
> # the event that's sent when your menu item is chosen
> addYourPluginEvent = BlockEvent.update(parcel, None,
> blockName='ActionOnYourPlugin',
> dispatchEnum='SendToBlockByReference',
> destinationBlockReference=handler)
>
> # create the menu item
> MenuItem.update(parcel, None, blockName='YourPluginMenu',
> title=_(u"Some action"),
> accel = _(u'Ctrl+Shift+Y'),
> helpString=_(u"This does something"),
> event=addYourPluginEvent,
> parentBlock=parentMenu)
>
>
> class YourPluginMenuBlock(Block):
> # the method name has to be the blockName of the BlockEvent above
> # sandwiched with "on" and "Event"
> def onActionOnYourPluginEvent(self, event):
> for item in
> Block.findBlockByName("MainView").getSidebarSelectedCollection():
> item_title = item.displayName
> # Python's print can't print unicode, encode as utf-8
> print item_title.encode('utf-8')
>
> #---------- End of __init__.py
>
> To install your plugin, you'll need to use the python that comes with
> Chandler (I'll call it chandler_python) in the YourPlugin directory:
>
> chandler_python setup.py develop
>
> Then, restart Chandler. To uninstall your plugin, you can always do:
>
> chandler_python setup.py develop -u
>
> You should rename YourPlugin whatever you want, of course. The action
> method I included is just a stub that iterates over the items in the
> collection and prints their titles, for your purposes you could pop up a
> dialog to choose a file and write whatever you want to it.
>
> Hope that helps, feel free to ask if you have more questions!
>
> Sincerely,
> Jeffrey
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "chandler-dev" mailing list
> http://lists.osafoundation.org/mailman/listinfo/chandler-dev
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev