Come sviluppare app per Ubuntu Touch, dall'init del progetto a come ottenere la convergenza tramite Ubuntu.Layouts.
Presentazione del 27 aprile 2014 alla Fiera del Radioamatore di Pordenone.
2. Cos'è QtQuick
È un insieme di tecnologie che include:
– QML, linguaggio dichiarativo utile a descrivere
l'interfaccia utente di un programma
– Javascript
– C++ API
4. QML Syntax
•
Il QML è un linguaggio dichiarativo che
consente agli oggetti di essere definiti secondo
le loro proprietà e di come possono interagire e
rispondere ai cambiamenti.
5. Import statements
• Un documento QML può definire diversi imports per
includere un insieme di componenti e script in
javascript
•
Esempio
import Namespace VersionMajor.VersionMinor
import Namespace VersionMajor.VersionMinor as
Identifier
import "directory"
import "file.js" as Script
6. Object Declarations
•
Creare un nuovo file con il nome del nuovo
componente
•
Il nome del file senza estensione sarà il nome
del nuovo componente
10. Javascript functions
import QtQuick 2.0
Item {
id: container
function randomNumber() {
return Math.random() * 360;
}
function getNumber() {
return container.randomNumber();
}
MouseArea {
anchors.fill: parent
// This line uses the JS function from the item
onClicked: rectangle.rotation = container.getNumber();
}
Rectangle {
id: rectangle
anchors.centerIn: parent
width: 160
height: 160
color: "green"
}
}
11. Nuovo progetto
•
Idee
– Nuove applicazioni
– Porting di Harmattan apps
– Remake di app iOS e Android
•
Tutorial
– Disponibili in rete http://developer.ubuntu.com
•
Design guidelines
– http://design.ubuntu.com/apps
•
Reference
– Core Apps
18. MainView
•
Componente principale per tutte le applicazioni
•
Aggiunge automaticamente un header e una
toolbar
•
Ruota automaticamente i contenuti a seconda
della rotazione del device
•
Modulo di Ubuntu.Components
– import Ubuntu.Components 0.1
21. PageStack
•
Componente principale per la visualizzazione delle Page
•
Può essere utilizzato dentro MainView
•
Metodi principali
– push(page, properties)
– pop()
– clear()
•
Proprietà
– currentPage
– depth
•
Aggiunge automaticamente nella Toolbar il tasto Back per la
navigazione
23. Tabs
•
Componente la gestione di più pagine principali
•
Proprietà principale
– currentPage
– count
– selectedTab
– selectedTabIndex
•
I Tabs si intregrano direttamente nella MainView
25. Page
•
Componente di base per MainView, PageStack e Tabs
•
Definisce il testo dell'Header e le funzioni della Toolbar
•
Proprietà:
– title
– actions
– tools
– flickable
27. Nuovi componenti
•
È utile creare nuovi componenti esternamente
per modularizzare la propria applicazione
•
Molto semplice
•
È necessario creare un nuovo modulo .qml
all'interno del progetto
30. Popups
• import Ubuntu.Components.Popups 0.1
•
Diversi tipi:
– Dialog
– Popover
– Sheet & ComposerSheet (sconsigliato l'uso)
•
Utili in diverse situazioni:
– Mostrare all'utente un messaggio di conferma
– Chiedere all'utente di riempire un campo
– Mostrare all'utente diverse possibilità di scelta
36. Ubuntu.Layouts
•
Componente dell'SDK utile a posizionare i vari elementi date
certe condizioni
• import Ubuntu.Layouts 0.1
•
Elementi
– Layouts
– ItemLayout
– ConditionalLayout
38. Alternative
•
E' possibile utilizzare altri metodi per ottenere la
convergenze nelle proprie applicazioni
•
Il QML è sufficientemente malleabile per
consentire altre soluzioni
39. States
•
Tutti gli oggetti (basate su Item) in QML hanno
due proprietà:
– state [string]
– states [var/list]
•
Gli states sono un set di proprietà definite
tramite uno State
41. States
•
State non si limita solo a variare proprietà con
PropertyChanges ma anche:
– Far partire script con StateChangeScript
– Override di un segnale per un oggetto con PropertyChanges
– Cambiare parente a un Item con ParentChange
– Modificare gli anchors di un oggetto con AnchorChanges
•
Lo state di default lo si indica con il nome “”
•
when per impostare il trigger automatico di uno stato data una
condizione
42. U1db
•
Modulo per la gestione di un database basato su JSON
objects
•
Molto semplice da usare
•
Comodo per salvare impostazioni e informazioni
permanentemente
•
Implementa la sincronizzazione con i server UbuntuOne
• import U1db 1.0 as U1db
•
Policy: networking
43. U1db.Database
•
Creazione di un Database
•
Un Database è un modello e può essere utilizzato
nelle ListView
•
Esempio:
U1db.Database {
id: myDatabase
path: "my-database"
}
44. U1db.Document
•
Document = JSON Object
•
Identificato tramite univocamente tramite docId
•
Può essere definito in runtime
•
Definizione di esempio:
U1db.Document {
id: aBookmarkDocument
docId: 'bookmarks'
create: true
defaults: { "bookmarks": [{}] }
}
45. U1db.Document
•
Metodi per accedere ai Document in un Database:
– Variant getDoc(docid)
– list<string> listDocs()
– string putDoc(contents[, docid])
– void deleteDoc(docid)
•
Per modificare un Document dato il suo id [javascript]:
var contents = aDocument.contents;
contents['name'] = 'hello world';
aDocuments.contents = contents;
47. U1db.Index
•
Crea un indice di tutti i Document presenti nel
Database data una o più chiavi
•
Definizione:
U1db.Index {
id: colorIndex
database: myDatabase
name: 'colorIndex'
expression: [ 'color', 'color.name' ]
}
48. U1db.Query
•
Dato un Index crea un modello con tutti i Document che rispettano la chiave di ricerca
•
Esempio:
U1db.Document {
id: aDocument1
database: aDatabase
docId: 'helloworld'
create: true
contents:{"hello": { "world": [ { "message": "Hello World" } ] } }
}
U1db.Index{
database: aDatabase
id: by_helloworld
expression: ["hello.world.message"]
}
U1db.Query{
id: aQuery
index: by_helloworld
query: [{"message":"Hel*"}]
}