Development/Tutorials/Kross/ActionCollections

    From KDE TechBase
    Revision as of 02:02, 3 March 2010 by Xxtjaxx (talk | contribs) (moved User:Xxtjaxx/HowTo-use-ActionCollections to Development/Tutorials/Kross/ActionCollections: Proof read by Aaron Seigo. Allowed to move by Aaron Seigo.)
    The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

    Basics

    Kross::ActionCollections, much like KActionCollections, represent a group of actions. A Kross::ActionCollection 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/snippet.py")); 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. '

    Note
    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)) {
          myAction->setInterpreter("python");
          connect(myAction,SIGNAL(finished(Kross::Action* )),this ,SLOT(finished(Kross::Action*)));
          myAction->trigger();
      }
    

    } 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!