Re: Dia Python



On Thu, 16 Jan 2003, Hans Breuer wrote:
At 21:23 15.01.03 -0600, Lars Clausen wrote:

As can be seen from my TWiki comments, I have gotten the Python plugin to
work, and it's rather cute, in fact.  Now I've two fairly general
questions about it that I hope somebody here can answer (Hans? James?):

1)  How do I set a value in a property?  I tried with just 

             props[s].value = 0.2

Try:
      obj.properties[s] = 0.2

See:
      pug-ins/python/pydia-properties.c:PyDiaProperties_AssSub
for the implementation.

   where s is a property key, but it gives me a type error.  Of course,
   DiaProperty.value is an object, but how do I make an object for a
   real?

Looking deeper into the code PyDiaProperty_ApplyToObject there
may be some C programming needed to get the above to work :)

All my Dia Python scripts did work without applying other
things than strings.

Ah.  That would explain it.  I could take a look, but my Python experience
is very limited.

2)  If I do changes values that way, will it be undoable?  I don't see a
   lot of undo-related stuff in the python plugin code, does that need
   to be rewritten?  I'd like to avoid the situation in Gimp where
   plugins can totally screw up undo.

To me it appears rather useless to let every single line of a script
being undoable: At least as a user I'd expect one operation (executing
a menu function, no matter if it's a plug-in or not) to be
undoable in one step.

Oh, absolutely.  There should probably be a wrapper around the script call
that marks an undo group.

Forcing the creation of new object and changeing their values to
be undoable would probably decrease PyDia performance about 50% ...

We shouldn't need to make Python objects for the undo.  And I'm more
concerned about this working correctly than the performance.  Have you seen
how scripts in Gimp affect undo?  Some can be undo, some are undone in
steps, some can't be undone at all, some mess up everything when trying to
undo. 

But in fact I almost know nothing about Dias undo implementation.
Are 'undo groups' possible with the current code ?

Very much so.  Undo elements are very small and must be grouped.  For
instance, modify_releate in app/modify_tool.c shows how
undo_set_transactionpoint marks how much to undo at a time.  It's quite a
bit, actually.

It's curious, BTW, that when the Python plug-in is in use, ^C doesn't break
out of the program anymore.

-Lars

-- 
Lars Clausen (http://shasta.cs.uiuc.edu/~lrclause)| Hårdgrim of Numenor
"I do not agree with a word that you say, but I   |----------------------------
will defend to the death your right to say it."   | Where are we going, and
    --Evelyn Beatrice Hall paraphrasing Voltaire  | what's with the handbasket?



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]