Documented that event channels can be assigned to each other to collapse events.

This commit is contained in:
Pietro Gagliardi 2014-04-10 11:59:40 -04:00
parent 0a54daa7b1
commit 9e185d815e
6 changed files with 6 additions and 5 deletions

View File

@ -10,6 +10,7 @@ import (
type Button struct {
// Clicked gets a message when the button is clicked.
// You cannot change it once the Window containing the Button has been opened.
// If you do not respond to this signal, nothing will happen.
Clicked chan struct{}
lock sync.Mutex

4
doc.go
View File

@ -7,9 +7,9 @@ To use the library, place your main program code in another function and call Go
Building GUIs is as simple as creating a Window, populating it with Controls, and then calling Open() on the Window. A Window only has one Control: you pack multiple Controls into a Window by arranging them in layouts (Layouts are also Controls). There are presently two Layouts, Stack and Grid, each with different semantics on sizing and placement. See their documentation.
Once a Window is open, you cannot make layout changes.
Once a Window is open, you cannot make layout or event channel changes.
Once your Window is open, you can begin to handle events. Handling events is simple: because all events are channels exposed as exported members of the Window and Control types, simply select on them.
Once your Window is open, you can begin to handle events. Handling events is simple: because all events are channels exposed as exported members of the Window and Control types, simply select on them. Event channels are initialized by default. However, before you Open a Window, you can freely reassign event channels, such that multiple events trigger the same channel, making event logic more compact. You may also choose not to handle events; events are sent asynchronously so the GUI loop is not initerrupted.
Here is a simple, complete program that asks the user for their name and greets them after clicking a button.
package main

View File

@ -25,6 +25,7 @@ general list:
- when adding menus:
- provide automated About, Preferneces, and Quit that place these in the correct location
- Quit should pulse AppQuit
- will probably want to bring back Event() as NewEvent() should that facility be necesary for menus, etc.
problem points:
- because the main event loop is not called if initialization fails, it is presently impossible for MsgBoxError() to work if UI initialization fails; this basically means we cannot allow initializiation to fail on Mac OS X if we want to be able to report UI init failures to the user with one (which would be desirable, maybe (would violate Windows HIG?))

View File

@ -17,7 +17,7 @@ func Go(main func()) error {
// AppQuit is pulsed when the user decides to quit the program if their operating system provides a facility for quitting an entire application, rather than merely close all windows (for instance, Mac OS X via the Dock icon).
// You should assign one of your Windows's Closing to this variable so the user choosing to quit the application is treated the same as closing that window.
// If you do not respond to this signal, nothing will happen.
// If you do not respond to this signal, nothing will happen; regardless of whether or not you respond to this signal, the application will not quit.
// Do not merely check this channel alone; it is not guaranteed to be pulsed on all systems or in all conditions.
var AppQuit chan struct{}

View File

@ -1,8 +1,6 @@
so I don't forget:
- should Labels be selectable?
- Message boxes should not show secondary text if none is specified. [TODO figure out what I meant by this]
- note that you can change event channels before opening the window; this allows unifying menus/toolbars/etc.
- will probably want to bring back Event() for this (but as NewEvent())
- add bounds checking to Area's sizing methods
- describe thread-safety of Area.SetSize()
- should all instances of -1 as error returns from Windows functions be changed to ^0 or does the uintptr() conversion handle sign extension?

View File

@ -11,6 +11,7 @@ import (
type Window struct {
// Closing gets a message when the user clicks the window's close button.
// You cannot change it once the Window has been opened.
// If you do not respond to this signal, nothing will happen; regardless of whether you handle the signal or not, the window will not be closed.
Closing chan struct{}
lock sync.Mutex