[Zope] object icons

Michel Pelletier michel@digicool.com
Tue, 22 Feb 2000 23:50:22 -0800


Loren Stafford wrote:
> 
> I'm not sure; but I inherited some code that works like this:
> 
> # Set the icon for the MyClass, because it doesn't act
> # like a regular object, so I can't use registerClass
> misc_ = { 'MyClassIcon': ImageFile('www/MyIcon.gif', globals()) }
> 
> Apparently, in this case, the ID is constructed as <MyClassID>+'Icon';
> because there is no corresponding icon=... statement anywhere. But, I can't
> find the Zope code that does this; so, I might be deceived.

This is the old, but still backward compatable way to assign an icon to
a class.  You can also assign the icon as a class attribute of a class,
or you can use the new, udocumented Product registration interface.  I'm
taking notes on undocumented interfaces, you just found one.

Zope now looks for a method in your Product's __init__.py file.  These
methods are passed a registration context with which they register
themselves with Zope.  Here I have heavily commented ZCatalog's
registration methods.  The key of it is a function you define called
'initialize'.  Zope will call this and pass a registration context which
defines the interface for Products to register themselves with Zope's
various services (like the managment interface, security,
subclassability, the help system, and yes, icons).


## import your various classes and thingies:

import ZCatalog, Catalog, CatalogAwareness, Vocabulary

def initialize(context):

    ## to register a new Zope managable object, call this method on
    ## the context, passing it the class, permission to protect the
    ## 'constructors', the two constructors (form and action tuple) the
    ## permission protects, and lastly, the icon.
    
    context.registerClass(
        ZCatalog.ZCatalog, 
        permission='Add ZCatalogs',
        constructors=(ZCatalog.manage_addZCatalogForm,
                      ZCatalog.manage_addZCatalog),
        icon='www/ZCatalog.gif',
        )

    ## registerClass can be called as many times as there are objects
    ## that your Product provides.  In this case, we also register
    ## Vocabularies.
    
    context.registerClass(
        Vocabulary.Vocabulary,
        permission='Add Vocabularies',
        constructors=(Vocabulary.manage_addVocabularyForm,
                      Vocabulary.manage_addVocabulary),
        icon='www/Vocabulary.gif',
        )

    ## If you want your classes to be subclassable as ZClasses, call
    ## 'registerBaseClass' on the context, passing it the class.

    context.registerBaseClass(ZCatalog.ZCatalog)
    context.registerBaseClass(CatalogAwareness.CatalogAware)

    ## finally, register the Help system for your Product (if any)
    context.registerHelp()


This is the new, 'supported' product registration, and we encourage
everyone to evolve their product to it.  

-Michel