[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kwrite-devel
Subject:    Re: KDE 4 + plans
From:       Sebastian Sauer <mail () dipe ! org>
Date:       2008-01-15 15:46:13
Message-ID: 200801151646.14242.mail () dipe ! org
[Download RAW message or body]

On Tuesday 15 January 2008, Christoph Cullmann wrote:
> Hi,
> 
> sorry for replying bit out of order. I have question :) Have read the
> howtos a bit, I am still curious: How it is possible with Kross to first
> evaluate a script and later call functions out of it with parameters (and
> retrieve the return values). Could you point me to an example?

Well, once a script got executed (triggered), it stays loaded till finalized 
and waits for beeing called.
That means, first you fill such a Kross::Action, then it's triggered and later 
at any stage either callFunction() can be used to call a script function with 
any parameter (QVariantList) + handle the returnvalue (QVariant).
Guess I just realized that there is really no sample at the tutorials how to 
use that. Uh, sorry. I was beliving there is :-/ Well, there seems to be at 
least a small sample that shows how callFunction is used within 
http://www.englishbreakfastnetwork.org/apidocs/apidox-kde-4.0/kdelibs-apidocs/kross/html/classKross_1_1Action.html


The alternate way (and seems so far most users did prefer that way) would be 
to use here signals+slots like shown at 
http://techbase.kde.org/index.php?title=Development/Tutorials/Kross/Connecting_Signals_and_slots_in_Kross#Autoconnecting_Signals_and_Slots
 The "trick" here is, that Kross will automaticly connect each signal the 
QObject has to a matching scripting function. At the C++ side all what is 
needed is then to emit the signal and behind the scene the arguments will be 
translated and a possible defined scripting function got called.

A good example here is SuperKaramba which uses the signal+slot way. All it 
defines is the rather huge class 
http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/src/karambainterface.h?view=markup
 The signals are transparent mapped to scripting functions (e.g. 
http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/examples/template.py?view=markup \
 and 
http://websvn.kde.org/trunk/KDE/kdeutils/superkaramba/examples/template.js?view=markup \
)  while the slots are then callable from within the script.
The reason why everything is within one class is backward-compatibility. It's 
for sure also not a problem to have multiple classes and pass around QObject 
instances, etc. like it's done e.g. at KSpread.

Re performance and optimization; for me it's also very important to note, that 
we did put quit a lot of time into performance (here Cyrille from Krita-fame 
spend a lot of time to tweak Ruby for Krita while myself did the same for 
Python). JavaScript (as in Kjs+KjsEmbed) is just slow by design and there is 
nothing somebody can do about this - it's around 20x slower then Ruby). Also 
Python was never designed with speed in mind, though we got it to be "only" 2 
times slower then Ruby (which just has an amazing good internal design). Also 
wirr from SuperKaramba-fame and myself did spend quit a lot of time to fix 
all mem-leaks (in python and ruby - no idea there about 
JavaScript/Kjs/KjsEmbed since so far just no user did show up in the SK-case 
who likes to write JS-Karambas) cause SK-scripts may run a very long time 
embedded in the desktop.
_______________________________________________
KWrite-Devel mailing list
KWrite-Devel@kde.org
https://mail.kde.org/mailman/listinfo/kwrite-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic