← Back to team overview

zim-wiki team mailing list archive

Re: Ideas about embedding custom objects in PageView

 

Rewritten to wiki: http://zim-wiki.org/wiki/doku.php?id=embedding_custom_objects

Dne 5. července 2010 15:04 Jaap Karssenberg
<jaap.karssenberg@xxxxxxxxx> napsal(a):
> Jiri,
>
> Probably this idea should be files in the development wiki at
> http://www.zim-wiki.org/wiki . That way we can add comments and work
> out the details.
>
> Regards,
>
> Jaap
>
>
> 2010/7/1 Jiří Janoušek <janousek.jiri@xxxxxxxxx>:
>> Hi everybody.
>>
>> I have some ideas about embedding custom objects in PageView, but I'm a beginner in Python and I don't have any experiences with the whole TextView stuff. I wonder if somebody could try to implement it. A custom object is a object which can't be rendered directly by TextView, inserting a GTK widget into TextView is needed. See examples bellow.
>>
>>        I. Wiki syntax
>> Example 1: tables
>> {{{Table:
>> | foo | bar | baz |
>> | foo | bar | baz |
>> }}}
>>
>> * Example 2: source code snippets
>> {{{Source: lang="python" linenumbers="true"
>> import gtk
>> w=gtk.Window()
>> ...
>> w.show_all()
>> gtk.main()
>> }}}
>>
>> * Example 3: LaTeX without external *.tex file
>> {{{LaTeX:
>> \bold{moo}
>> }}}
>>
>> * Example 4: Dummy object for further explanation
>> {{{AnotherObject: name="foo" attr2="bar" attr3="baz"
>> some data
>> }}}
>>
>>        II. ParseTree representation
>> In ParseTree it could be represented by element 'object':
>>
>> builder.start('object', {'objectname':'AnotherObject', 'name':'foo', 'attr2':'bar', 'attr3':'baz'})
>> builder.data('some data')
>> builder.end('object')
>>
>>        III. Rendering and manipulating with data
>> Rendering and manipulating with object's data is provided by ObjectManager class.
>>
>> class AnotherObjectManager(ObjectManagerClass):
>>        # ObjectManagerClass is an abstract class
>>        def __init__(self, attrs):
>>                self.attrs=attrs
>>                # initiate gui
>>                self.entry=gtk.Entry()
>>
>>        def set_data(self, data):
>>                # parse data and fill the gui
>>                self.entry.set_text(data)
>>
>>        def get_data(self):
>>                #get data from gui and dump them
>>                return self.entry.get_text()
>>
>>        def get_widget(self):
>>                # return widget to be
>>                # included in PageView
>>                return self.entry
>>
>>        def export(self, format):
>>                # exporting object,
>>                # returns None if format is not
>>                # supported by this ObjectManager
>>                # and the fallback should be verbatim
>>                # paragraph
>>                if format == 'html':
>>                        return '<input name="'+
>>                        self.attrs['name']+
>>                        '" value="'+self.get_data()+'">'
>>                else: return None
>>
>>        IV. Registering of ObjectManager
>> It should be some mechanism to register ObjectManager easily by plugins.
>>
>> # zim/plugins/anotherobject.py
>>
>> class AnotherObjectPlugin(PluginClass):
>>        def __init__(self, ui):
>>                PluginClass.__init__(self, ui)
>>                ...
>>                ui.register_object_manager('AnotherObject', AnotherObjectManager)
>>                ...
>>
>> The fallback for unknown object could be verbatim paragraph.
>>
>>        V. Insertion into PageView
>> if ObjectManager for current object is registered:
>>        manager = ObjectManager(attrs)
>>        manager.set_data(data)
>>        widget=manager.get_widget()
>>        Insert widget into PageView
>> else:
>>        Fallback to verbatim paragraph
>>        (whole {{{ }}} block to preserve
>>        objectname and attrs)
>>
>>        VI. Conclusion
>> This feature is very complex, but it will allow to write variety of new plugins.
>>
>> Best regards
>> -- Jiří Janoušek
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~zim-wiki
>> Post to     : zim-wiki@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~zim-wiki
>> More help   : https://help.launchpad.net/ListHelp
>>
>>
>



References