(A small how to on Kross::ActionCollection's) |
Neverendingo (Talk | contribs) m (Text replace - "</code>" to "</syntaxhighlight>") |
||
| (7 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
== Basics == | == Basics == | ||
| − | Kross::ActionCollections | + | 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. |
| − | Kross:: | + | |
You can create a new Kross::ActionCollection like this: | You can create a new Kross::ActionCollection like this: | ||
| − | < | + | <syntaxhighlight lang="cpp"> |
actionCollection = new Kross::ActionCollection("actioncollection",Kross::Manager::self().actionCollection()); | actionCollection = new Kross::ActionCollection("actioncollection",Kross::Manager::self().actionCollection()); | ||
| − | </ | + | </syntaxhighlight> |
| − | The | + | 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 == | == Using it == | ||
| − | Now that we created a Kross::ActionCollection | + | 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. |
| − | < | + | <syntaxhighlight lang="cpp"> |
Kross::Action *action1 = new Kross::Action(actionCollection,QUrl("path/to/some/snippet.py")); | 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 *action2 = new Kross::Action(actionCollection,QUrl("path/to/some/snippet.js")); | ||
Kross::Action *action3 = new Kross::Action(actionCollection,QUrl("path/to/some/snippet.rb")); | Kross::Action *action3 = new Kross::Action(actionCollection,QUrl("path/to/some/snippet.rb")); | ||
| − | </ | + | </syntaxhighlight> |
| − | Each time we | + | 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) : | Once we have declared the Kross::Actions we can either access them by their fully qualified name (the second Argument in the constructor) : | ||
| − | < | + | <syntaxhighlight lang="cpp"> |
| − | actioncollection->action | + | actioncollection->action("path/to/some/snippet.js"); |
| − | </ | + | </syntaxhighlight> |
or iterate through all Kross::Actions and trigger those that match a pattern for example: | or iterate through all Kross::Actions and trigger those that match a pattern for example: | ||
| − | < | + | <syntaxhighlight lang="cpp"> |
foreach(Kross::Action* myAction, actioncollection->actions()) { | foreach(Kross::Action* myAction, actioncollection->actions()) { | ||
if(myAction->name().contains("py", Qt::CaseInsensitive)) { | if(myAction->name().contains("py", Qt::CaseInsensitive)) { | ||
| Line 32: | Line 32: | ||
} | } | ||
} | } | ||
| − | </ | + | </syntaxhighlight> |
Notice that we connected the SIGNAL finished(Kross::Action*) before triggering the script. Otherwise the SLOT finished(Kross::Action*) won't run. | 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! | ||
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.
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.
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!