aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/obscuren/qml/doc.go
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/github.com/obscuren/qml/doc.go')
-rw-r--r--Godeps/_workspace/src/github.com/obscuren/qml/doc.go199
1 files changed, 199 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/obscuren/qml/doc.go b/Godeps/_workspace/src/github.com/obscuren/qml/doc.go
new file mode 100644
index 000000000..94b2404a9
--- /dev/null
+++ b/Godeps/_workspace/src/github.com/obscuren/qml/doc.go
@@ -0,0 +1,199 @@
+// Package qml offers graphical QML application support for the Go language.
+//
+// Attention
+//
+// This package is in an alpha stage, and still in heavy development. APIs may
+// change, and things may break.
+//
+// At this time contributors and developers that are interested in tracking the
+// development closely are encouraged to use it. If you'd prefer a more stable
+// release, please hold on a bit and subscribe to the mailing list for news. It's
+// in a pretty good state, so it shall not take too long.
+//
+// See http://github.com/go-qml/qml for details.
+//
+//
+// Introduction
+//
+// The qml package enables Go programs to display and manipulate graphical content
+// using Qt's QML framework. QML uses a declarative language to express structure
+// and style, and supports JavaScript for in-place manipulation of the described
+// content. When using the Go qml package, such QML content can also interact with
+// Go values, making use of its exported fields and methods, and even explicitly
+// creating new instances of registered Go types.
+//
+// A simple Go application that integrates with QML may perform the following steps
+// for offering a graphical interface:
+//
+// * Call qml.Run from function main providing a function with the logic below
+// * Create an engine for loading and running QML content (see NewEngine)
+// * Make Go values and types available to QML (see Context.SetVar and RegisterType)
+// * Load QML content (see Engine.LoadString and Engine.LoadFile)
+// * Create a new window for the content (see Component.CreateWindow)
+// * Show the window and wait for it to be closed (see Window.Show and Window.Wait)
+//
+// Some of these topics are covered below, and may also be observed in practice
+// in the following examples:
+//
+// https://github.com/go-qml/qml/tree/v1/examples
+//
+//
+// Simple example
+//
+// The following logic demonstrates loading a QML file into a window:
+//
+// func main() {
+// err := qml.Run(run)
+// ...
+// }
+//
+// func run() error {
+// engine := qml.NewEngine()
+// component, err := engine.LoadFile("file.qml")
+// if err != nil {
+// return err
+// }
+// win := component.CreateWindow(nil)
+// win.Show()
+// win.Wait()
+// return nil
+// }
+//
+// Handling QML objects in Go
+//
+// Any QML object may be manipulated by Go via the Object interface. That
+// interface is implemented both by dynamic QML values obtained from a running
+// engine, and by Go types in the qml package that represent QML values, such as
+// Window, Context, and Engine.
+//
+// For example, the following logic creates a window and prints its width
+// whenever it's made visible:
+//
+// win := component.CreateWindow(nil)
+// win.On("visibleChanged", func(visible bool) {
+// if (visible) {
+// fmt.Println("Width:", win.Int("width"))
+// }
+// })
+//
+// Information about the methods, properties, and signals that are available for QML
+// objects may be obtained in the Qt documentation. As a reference, the "visibleChanged"
+// signal and the "width" property used in the example above are described at:
+//
+// http://qt-project.org/doc/qt-5.0/qtgui/qwindow.html
+//
+// When in doubt about what type is being manipulated, the Object.TypeName method
+// provides the type name of the underlying value.
+//
+//
+// Publishing Go values to QML
+//
+// The simplest way of making a Go value available to QML code is setting it
+// as a variable of the engine's root context, as in:
+//
+// context := engine.Context()
+// context.SetVar("person", &Person{Name: "Ale"})
+//
+// This logic would enable the following QML code to successfully run:
+//
+// import QtQuick 2.0
+// Item {
+// Component.onCompleted: console.log("Name is", person.name)
+// }
+//
+//
+// Publishing Go types to QML
+//
+// While registering an individual Go value as described above is a quick way to get
+// started, it is also fairly limited. For more flexibility, a Go type may be
+// registered so that QML code can natively create new instances in an arbitrary
+// position of the structure. This may be achieved via the RegisterType function, as
+// the following example demonstrates:
+//
+// qml.RegisterTypes("GoExtensions", 1, 0, []qml.TypeSpec{{
+// Init: func(p *Person, obj qml.Object) { p.Name = "<none>" },
+// }})
+//
+// With this logic in place, QML code can create new instances of Person by itself:
+//
+// import QtQuick 2.0
+// import GoExtensions 1.0
+// Item{
+// Person {
+// id: person
+// name: "Ale"
+// }
+// Component.onCompleted: console.log("Name is", person.name)
+// }
+//
+//
+// Lowercasing of names
+//
+// Independently from the mechanism used to publish a Go value to QML code, its methods
+// and fields are available to QML logic as methods and properties of the
+// respective QML object representing it. As required by QML, though, the Go
+// method and field names are lowercased according to the following scheme when
+// being accesed from QML:
+//
+// value.Name => value.name
+// value.UPPERName => value.upperName
+// value.UPPER => value.upper
+//
+//
+// Setters and getters
+//
+// While QML code can directly read and write exported fields of Go values, as described
+// above, a Go type can also intercept writes to specific fields by declaring a setter
+// method according to common Go conventions. This is often useful for updating the
+// internal state or the visible content of a Go-defined type.
+//
+// For example:
+//
+// type Person struct {
+// Name string
+// }
+//
+// func (p *Person) SetName(name string) {
+// fmt.Println("Old name is", p.Name)
+// p.Name = name
+// fmt.Println("New name is", p.Name)
+// }
+//
+// In the example above, whenever QML code attempts to update the Person.Name field
+// via any means (direct assignment, object declarations, etc) the SetName method
+// is invoked with the provided value instead.
+//
+// A setter method may also be used in conjunction with a getter method rather
+// than a real type field. A method is only considered a getter in the presence
+// of the respective setter, and according to common Go conventions it must not
+// have the Get prefix.
+//
+// Inside QML logic, the getter and setter pair is seen as a single object property.
+//
+//
+// Painting
+//
+// Custom types implemented in Go may have displayable content by defining
+// a Paint method such as:
+//
+// func (p *Person) Paint(painter *qml.Painter) {
+// // ... OpenGL calls with the gopkg.in/qml.v1/gl/<VERSION> package ...
+// }
+//
+// A simple example is available at:
+//
+// https://github.com/go-qml/qml/tree/v1/examples/painting
+//
+//
+// Packing resources into the Go qml binary
+//
+// Resource files (qml code, images, etc) may be packed into the Go qml application
+// binary to simplify its handling and distribution. This is done with the genqrc tool:
+//
+// http://gopkg.in/qml.v1/cmd/genqrc#usage
+//
+// The following blog post provides more details:
+//
+// http://blog.labix.org/2014/09/26/packing-resources-into-go-qml-binaries
+//
+package qml