Kross::ActionCollections, much like KActionCollections, represent a group of actions. A Kross::ActionCollections is used to group KRoss::Actions together and collectively give them an icon, description, name and display text.

You can create a new Kross::ActionCollection like this: actionCollection = new Kross::ActionCollection("actioncollection",Kross::Manager::self().actionCollection()); The first parameter, "actioncollection" in the example above, can be replaced by any name you want and should be useful and reasonably chosen. Passing in the collection returned by Kross::Manager::self()->actionCollection() defines that this is a toplevel collection. This is usefull if you want to have sub collections for different types of Kross::Actions.

Using it

Now that we have created a Kross::ActionCollection it is time to populate it with Kross::Actions. Therefore we next create some actions, each of which can have different code and interpreters. Kross::Action *action1 = new Kross::Action(actionCollection,QUrl("path/to/some/")); Kross::Action *action2 = new Kross::Action(actionCollection,QUrl("path/to/some/snippet.js")); Kross::Action *action3 = new Kross::Action(actionCollection,QUrl("path/to/some/snippet.rb")); Each time we declare an Action, we gave it the Kross::ActionCollection the Action should be a child of as the first parameter and a path to a file as the second. '

It doesn't need to be a valid file since you can set the code content later on any way.

Once we have declared the Kross::Actions we can either access them by their fully qualified name (the second Argument in the constructor) : actioncollection->action("path/to/some/snippet.js"); or iterate through all Kross::Actions and trigger those that match a pattern for example: foreach(Kross::Action* myAction, actioncollection->actions()) {

  if(myAction->name().contains("py", Qt::CaseInsensitive)) {
      connect(myAction,SIGNAL(finished(Kross::Action* )),this ,SLOT(finished(Kross::Action*)));

} Notice that we connected the SIGNAL finished(Kross::Action*) before triggering the script. Otherwise the SLOT finished(Kross::Action*) won't run.

What now?

With the ActionCollection and the metadata interfaces such as name() icon() and description() you can create a small MVC so users can enable/disable some of the actions you loaded from your files.

Happy hacking!

This page was last edited on 31 May 2019, at 08:22. Content is available under Creative Commons License SA 4.0 unless otherwise noted.