This tutorial is intended to be a simple introduction to kross for the kde4 application writer in multiple scripting languages.

This tutorial is intended to be a simple introduction to kross for the kde4 application writer in multiple scripting languages.

Line 12:

Line 12:

== Additional Bindings ==

== Additional Bindings ==

−

If you have already set up your environment as described in [[Getting Started/Build/KDE4]], you can already use kross with the javascript language. You can choose optionally to install support for python and ruby from kdebindings. Either checkout and build kdebindings, or just the kdebindings/python and kdebindings/ruby subdirectories ([[Getting_Started/Build/KDE4#Installing_a_subset_of_a_module|Installing_a_subset_of_a_module]]).

+

If you have already set up your environment as described in [[Getting Started/Build]], you can already use kross with the javascript language. You can choose optionally to install support for python and ruby from kdebindings. Either checkout and build kdebindings, or just the kdebindings/python and kdebindings/ruby subdirectories.

−

<code bash>

+

<syntaxhighlight lang="bash">

−

cs KDE

+

cd KDE

svn co -N kdebindings

svn co -N kdebindings

cd kdebindings

cd kdebindings

Line 21:

Line 21:

svn up ruby

svn up ruby

cmakekde

cmakekde

−

</code>

+

</syntaxhighlight>

== Hello World ==

== Hello World ==

Line 34:

Line 34:

The main.cpp contains the entry-point for our sample application.

The main.cpp contains the entry-point for our sample application.

−

<code cpp>

+

<syntaxhighlight lang="cpp">

// First some Qt and KDE includes

// First some Qt and KDE includes

#include <QString>

#include <QString>

Line 71:

Line 71:

return app.exec();

return app.exec();

}

}

−

</code>

+

</syntaxhighlight>

=== mainwindow.h ===

=== mainwindow.h ===

−

The main window that is used to display the combobox which contains a list of available interpreters and the label which we like to change from within scripting code.

+

The main window class that is used to display the combobox which contains a list of available interpreters and the label which we like to change from within scripting code.

−

<code cpp>

+

<syntaxhighlight lang="cpp">

#ifndef MAINWINDOW_H

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#define MAINWINDOW_H

Line 92:

Line 92:

MainWindow(QWidget *parent=0);

MainWindow(QWidget *parent=0);

private Q_SLOTS:

private Q_SLOTS:

−

// This slot got called if the item in the combobox changed.

+

// This slot is called when the item in the combobox is changed.

void interpreterActivated(const QString &);

void interpreterActivated(const QString &);

private:

private:

QLabel* lblHello;

QLabel* lblHello;

−

QComboBox* cmbHello;

+

QComboBox* cmbInterpreters;

};

};

#endif

#endif

−

</code>

+

</syntaxhighlight>

=== mainwindow.cpp ===

=== mainwindow.cpp ===

Line 106:

Line 106:

This code creates a simple dialog with a combobox showing available interpreters along with a label for displaying a message. The kross/core/manager.h and kross/core/action.h are included to provide kross functionality, which is invoked when a selection is made on the combobox. The code below makes the lblHello label available to scripts as a MyLabel object, and executes different code depending on the interpreter chosen.

This code creates a simple dialog with a combobox showing available interpreters along with a label for displaying a message. The kross/core/manager.h and kross/core/action.h are included to provide kross functionality, which is invoked when a selection is made on the combobox. The code below makes the lblHello label available to scripts as a MyLabel object, and executes different code depending on the interpreter chosen.

The next step is to extract the scripts into separate files. This has the obvious advantage of being editable without being recompiled. Edit the <tt>MainWindow::interpreterActivated</tt> in <tt>mainwindow.cpp</tt> to the following:

The next step is to extract the scripts into separate files. This has the obvious advantage of being editable without being recompiled. Edit the <tt>MainWindow::interpreterActivated</tt> in <tt>mainwindow.cpp</tt> to the following:

Contents

If you have already set up your environment as described in Getting Started/Build, you can already use kross with the javascript language. You can choose optionally to install support for python and ruby from kdebindings. Either checkout and build kdebindings, or just the kdebindings/python and kdebindings/ruby subdirectories.

In this tutorial a simple dialog is created which contains a drop-down list and a label. When an interpreter is selected from the list, some scripting code is executed and the label text is updated in the script.

Create a krosshello folder in the kde-devel home directory (or choose another location). Create the following files and run cmakekde:

This code creates a simple dialog with a combobox showing available interpreters along with a label for displaying a message. The kross/core/manager.h and kross/core/action.h are included to provide kross functionality, which is invoked when a selection is made on the combobox. The code below makes the lblHello label available to scripts as a MyLabel object, and executes different code depending on the interpreter chosen.

#include <QVBoxLayout>#include <QDebug>#include "mainwindow.h"#include <kross/core/manager.h>#include <kross/core/action.h>// the constructor.
MainWindow::MainWindow(QWidget *parent): QWidget(parent){// Create the combobox where we display a list of// available interpreters.
cmbInterpreters =new QComboBox (this);
cmbInterpreters->addItem("Choose Interpreter", "");// Now let's add the interpreters. Please note, that all// interpreters that are installed are displayed in the list.// Per default JavaScript will be always// available while Python, Ruby or other interpreters// may need to be installed before like explained at the// "Additional Bindings" section above.
foreach(QString s, Kross::Manager::self().interpreters())
cmbInterpreters->addItem(s);// Connect the combobox signal with our slot to be able to// do something if the active item in the combobox changed.
connect(cmbInterpreters, SIGNAL(activated(const QString &)),
this, SLOT(interpreterActivated(const QString &)));// The label we want to manipulate from within scripting// code.
lblHello =new QLabel("Hello", this);// Put everything into a layout to have it shown in a// nice way.
QVBoxLayout *layout =new QVBoxLayout;
layout->addWidget(cmbInterpreters);
layout->addWidget(lblHello);
setLayout(layout);}// this slot is called when the active item of the combobox changesvoid MainWindow::interpreterActivated(const QString &strSelectedInterpreter){if(strSelectedInterpreter.isEmpty()){// if no interpreter was selected, we display nothing.
lblHello->setText("-");return;}// Now let's create a Kross::Action instance which will act// as container for our script. You are also able to cache// that action, manipulate it on demand or execute it multiple// times.
Kross::Action action(this, "MyScript");// Now let's set the scripting code that should be executed// depending on the choosen interpreter. You are also able to// use action.setFile("/path/scriptfile") here to execute// an external scriptfile, as shown later in this tutorial.if(strSelectedInterpreter =="python")
action.setCode("import MyLabel\nMyLabel.text = 'Hello from python!'");elseif(strSelectedInterpreter =="ruby")
action.setCode("require 'MyLabel'\nMyLabel.text = 'Hello from ruby!'");elseif(strSelectedInterpreter =="javascript")
action.setCode("MyLabel.setText('Hello from javascript!')");elsereturn;// Set the name of the interpreter that should be used to// evaluate the scripting code above. It's not needed to set// it explicitly if we defined an external scripting file via// action.setFile() since then Kross will determinate the right// one. But since we set the scripting code above manually by using// action.setCode() we need to define explicitly what interpreter// should be used.
action.setInterpreter(strSelectedInterpreter);// Now let's add the QLabel instance to let the scripting code// access it.
action.addObject(lblHello, "MyLabel");// Finally execute the scripting code.
action.trigger();}

The next step is to extract the scripts into separate files. This has the obvious advantage of being editable without being recompiled. Edit the MainWindow::interpreterActivated in mainwindow.cpp to the following: