Plasma/QMLStyle: Difference between revisions
Appearance
< Plasma
Line 39: | Line 39: | ||
// Property aliases | // Property aliases | ||
property alias bar : actual.property | property alias bar: actual.property | ||
// Properties defined by Item class, except geometry properties | // Properties defined by Item class, except geometry properties |
Revision as of 19:36, 30 October 2012
Directory Structure
- QML files have the .qml suffix go into ui/ they use CamelCase in their filename.
- Javascript files have the .js suffix and go into code/
- If and only if we are in a qml-only plasmoid, the javascript files should be imported with the following keyword:
import "plasmapackage:/code/Foo.js" as Foo
This way becomes easier to have device-specific qml files, while keeping a single copy of the javascript code.
JS Code Blocks
For all Javascript code blocks follow the kdelibs code style and must validate when passed through JSLint. This means spaces around operators, if/else on same line as braces, four space indentation (not tabs) etc, see techbase.
Items
QML Item declarations follow this pattern:
Item { // brace on same line
// line indentation
id: topLevelItem // the id, if any, is the first line
// Geometry properties
// grouped propertes as anchors should be in this notation,
// unless there is only one property
anchors {
fill: parent
rightMargin: 6
}
width:
height:
// Signals
signal somethingJustHappened
// Properties of this item
property bool foo
// Property aliases
property alias bar: actual.property
// Properties defined by Item class, except geometry properties
someProperty: 123
// Data models, including Plasma.DataSources
model: { }
// all on* change functions
onFooChanged: fooFunction()
onSomePropertyChanged: { // brace on same line as these use the "name:" style
fooFunction(); // in blocks, kdelibs style, including semicolons at EOL
}
// all functions
function fooFunction()
{ // open brace on its OWN line
// code goes here; kdelibs style
}
function barFunction()
{
// note the newline between this function and the one above it
}
// all non-UI sub-items, such as timers
Timer {
id: timer
interval: 100
onTriggered: fooFunction()
}
// all UI sub-items
Item {
anchors.fill: parent
}
Item {
// note the newline between items
id: secondItem
}
// all components
Component {
id: firstComponent
}
Component {
// note the newline between components
id: secondComponent
}
// States
states: [
State {
name: firstState
// changes
},
State {
name: secondState
}
] // states
// Transitions
transitions: [
Transition {
from: "foo"
to: "bar"
// transition definition
},
Transition {
from: "foo"
to: "bar"
// transition definition
},
] // transitions
// the "onCompleted" function goes last, as befits the name
Component.onCompleted: {
// if multi-line block, brace goes on same line due to "name:" style of declaration
fooFunction();
}
} // topLevelItem: for items with considerable contents, comment the last } with what it matches