Widgets

Widgets an obsolete application just for playing and getting touch with widgets. Written in plain Ano script, no C involved.

Widgets demonstrates how to use different type of widgets.

User interface

There is dummy widgets to play with.

Compilation

Easiest way to get Widgets running is to go to examples directory in package root, and run:

$ ./build.sh gui_widgets

build.sh script compiles Ano script, menu and widget definitions to C, copies source files in place and pops up instructions what to do next. Follow them. Check also examples/README for more info.

Screenshots

Lights off
Lights on

Preview

;
; This is dummy application to demonstrate widget outlook.
;
; @ANO_SCRIPT_NAME		gui_widgets
; @ANO_SCRIPT_VERSION		0.0.3
; @ANO_SCRIPT_DESCRIPTION	Widget demo
;
; @ANO_FLAGS_VAR_NAME_SUBS	[ ]
; @ANO_FLAGS_VAR_WARN_UNUSED	[ ]
;
; Copyright (c) 2016-2024, Jani Salonen <salojan@goto10.co>
; All rights reserved.
;

main {
	; Global uninitialized variables
	var	[handle] hnd_wnd_main

	; Initialize windowing system
	window_init

	; Open main window
	window_open ("Widget demo", NULL, \
		[handle] @0, [uint] 1, [uint] 0, [uint] 0, \
		[int] -1, [int] -1, [uint] 800, [uint] 900, \
		NULL, NULL, NULL, NULL, NULL, NULL, \
		NULL, NULL, "cb_destroy", \
		NULL, NULL, NULL, "cb_open")
}

callback cb_open (_hnd) {
	mov	hnd_wnd_main (_hnd)
	mov	color (# 0xff, 0xff, 0xff, 0x00)

	; Create scales and indicators
	widget_update_scale_bars (hnd_wnd_main, \
		"widget_a", NULL, NULL, 7, 0, 0, 100, 11, color)

	widget_indicator_set (hnd_wnd_main, \
		"widget_a", NULL, NULL, 7, 0, color, 1, 20)

	widget_indicator_set (hnd_wnd_main, \
		"widget_b", NULL, NULL, 7, 0, color, 1, 20)

	widget_indicator_set (hnd_wnd_main, \
		"widget_c", NULL, NULL, 7, 0, color, 1, 20)

	widget_indicator_set (hnd_wnd_main, \
		"widget_d", NULL, NULL, 7, 0, color, 1, 20)

	widget_indicator_set (hnd_wnd_main, \
		"widget_e", NULL, NULL, 7, 0, color, 1, 20)

	widget_indicator_set (hnd_wnd_main, \
		"widget_f", NULL, NULL, 7, 0, color, 1, 20)

	widget_update_scale_bars (hnd_wnd_main, \
		"slider_a", NULL, NULL, 7, 0, 0, 10, 11, color)

	widget_update_scale_bars (hnd_wnd_main, \
		"slider_b", NULL, NULL, 7, 0, 0, 20, 5, color)

	; Map main window
	window_map (hnd_wnd_main)
}

callback cb_destroy {
	window_close (hnd_wnd_main)

	exit
}

callback cb_turn_a (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step
}

callback cb_turn_b (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step
}

callback cb_turn_c (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step
}

callback cb_turn_d (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step
}

callback cb_turn_e (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step
}

callback cb_turn_f (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step

	; Widget even step turns light on, odd step turns it off
	mov	_s (_step % 2)

	; Which lights to set is based on widget step
	cmp	_step (1)
	ja	"cb_turn_f_a"
	mov	_a ("lamp_a")
	mov	_b ("led_a_a")
	mov	_c ("led_b_a")
	mov	_d ("led_c_a")
	jmp	"cb_turn_f_x"

cb_turn_f_a:
	cmp	_step (3)
	ja	"cb_turn_f_b"
	mov	_a ("lamp_b")
	mov	_b ("led_a_b")
	mov	_c ("led_b_b")
	mov	_d ("led_c_b")
	jmp	"cb_turn_f_x"

cb_turn_f_b:
	cmp	_step (5)
	ja	"cb_turn_f_c"
	mov	_a ("lamp_c")
	mov	_b ("led_a_c")
	mov	_c ("led_b_c")
	mov	_d ("led_c_c")
	jmp	"cb_turn_f_x"

cb_turn_f_c:
	cmp	_step (7)
	ja	"cb_turn_f_d"
	mov	_a ("lamp_d")
	mov	_b ("led_a_d")
	mov	_c ("led_b_d")
	mov	_d ("led_c_d")
	jmp	"cb_turn_f_x"

cb_turn_f_d:
	cmp	_step (9)
	ja	"cb_turn_f_e"
	mov	_a ("lamp_e")
	mov	_b ("led_a_e")
	mov	_c ("led_b_e")
	mov	_d ("led_c_e")
	jmp	"cb_turn_f_x"

cb_turn_f_e:
	mov	_a ("lamp_f")
	mov	_b ("led_a_f")
	mov	_c ("led_b_f")
	mov	_d ("led_c_f")

cb_turn_f_x:
	widget_step_set (hnd_wnd_main, _a, _s)
	widget_step_set (hnd_wnd_main, _b, _s)
	widget_step_set (hnd_wnd_main, _c, _s)
	widget_step_set (hnd_wnd_main, _d, _s)
;	widget_refresh (hnd_wnd_main)
}

callback cb_push_a (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step
}

callback cb_push_b (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step
}

callback cb_push_c (_widget_name, _widget_id, _min, _max, _steps, _step) {
	dump	_widget_name
	dump	_step

	widget_step_set (hnd_wnd_main, "led_button_c", _step)
;	widget_refresh (hnd_wnd_main)
}
;
; Copyright (c) 2016-2024, Jani Salonen <salojan at goto10 piste co>
; All rights reserved.
;
; @WIDGET_DEFAULT_COLOR			rgb:#ffffff
; @WIDGET_DEFAULT_HUE			0
; @WIDGET_DEFAULT_LIGHT			no
; @WIDGET_DEFAULT_STATE			enable
; @WIDGET_DEFAULT_STICKY		no
; @WIDGET_DEFAULT_TITLE_CHARSET		UTF-8
; @WIDGET_DEFAULT_TITLE_COLOR		rgb:#ffffff
; @WIDGET_DEFAULT_TITLE_DPI		0
;  WIDGET_DEFAULT_TITLE_FONT		path_to_the_font_file
; @WIDGET_DEFAULT_TITLE_JUSTIFICATION	center
; @WIDGET_DEFAULT_TITLE_POSITION	above
; @WIDGET_DEFAULT_TITLE_SIZE		11
; @WIDGET_DEFAULT_TRIGGER		constant
; @WIDGET_DEFAULT_TYPE			0
; @WIDGET_DEFAULT_VALUE			0
;
; @WIDGET_USE_BOUNDING_BOXES		no
;

window "1" {
	set "0" {
		widget "background" {
			name		"background"

			image		"examples/datafiles/background.tga"
		}

		; Turnswitch type 0
		widget "turnswitch" {
			name		"widget_a"

			position	x = 80, y = 100

			angle		min = 45, max = 315
			steps		start = 0, total = 100

			title		"Large chicken head", \
					x = 0, y = -50

			action		turn = cb_turn_a
		}

		; Turnswitch type 1
		widget "turnswitch" {
			name		"widget_b"
			type		1

			position	x = 280, y = 108

			angle		min = 45, max = 315
			steps		start = 0, total = 100

			title		"Small chicken head", \
					x = 0, y = -20

			action		turn = cb_turn_b
		}

		; Turnswitch type 2
		widget "turnswitch" {
			name		"widget_c"
			type		2

			position	x = 88, y = 310

			angle		min = 1, max = 359
			steps		start = 0, total = 359

			title		"Large round", \
					x = 0, y = -20

			action		turn = cb_turn_c
		}

		; Turnswitch type 3
		widget "turnswitch" {
			name		"widget_d"
			type		3

			position	x = 296, y = 318

			angle		min = 1, max = 359
			steps		start = 0, total = 359

			title		"Small round", \
					x = 0, y = -20

			action		turn = cb_turn_d
		}

		; Turnswitch type 4
		widget "turnswitch" {
			name		"widget_e"
			type		4

			position	x = 96, y = 500

			angle		min = 5, max = 355
			steps		start = 0, total = 9

			title		"Large flat-top", \
					x = 0, y = -20

			action		turn = cb_turn_e
		}

		; Turnswitch type 5
		widget "turnswitch" {
			name		"widget_f"
			type		5

			position	x = 304, y = 508

			angle		min = 5, max = 355
			steps		start = 0, total = 11

			title		"Lights, please!", \
					x = 0, y = -20

			action		turn = cb_turn_f
		}

		; Lamp type 0
		widget "lamp" {
			name		"lamp_a"

			position	x = 440, y = 80

			title		"Red lamp", \
					x = 0, y = -10
		}

		; Lamp type 1
		widget "lamp" {
			name		"lamp_b"
			type		1

			position	x = 558, y = 80

			title		"Orange", \
					x = 0, y = -10
		}

		; Lamp type 2
		widget "lamp" {
			name		"lamp_c"
			type		2

			position	x = 676, y = 80

			title		"White", \
					x = 0, y = -10
		}

		; Lamp type 3
		widget "lamp" {
			name		"lamp_d"
			type		3

			position	x = 440, y = 240

			title		"Green", \
					x = 0, y = -10
		}

		; Lamp type 4
		widget "lamp" {
			name		"lamp_e"
			type		4

			position	x = 558, y = 240

			title		"Blue", \
					x = 0, y = -10
		}

		; Lamp type 5
		widget "lamp" {
			name		"lamp_f"
			type		5

			position	x = 676, y = 240

			title		"Purple", \
					x = 0, y = -10
		}

		; Led type 1, subtype 0
		widget "led_1" {
			name		"led_a_a"

			position	x = 460, y = 400
		}

		; Led type 1, subtype 1
		widget "led_1" {
			name		"led_a_b"
			type		1

			position	x = 460, y = 432
		}

		; Led type 1, subtype 2
		widget "led_1" {
			name		"led_a_c"
			type		2

			position	x = 460, y = 464
		}

		; Led type 1, subtype 3
		widget "led_1" {
			name		"led_a_d"
			type		3

			position	x = 460, y = 496
		}

		; Led type 1, subtype 4
		widget "led_1" {
			name		"led_a_e"
			type		4

			position	x = 460, y = 528
		}

		; Led type 1, subtype 5
		widget "led_1" {
			name		"led_a_f"
			type		5

			position	x = 460, y = 560
		}

		; Led type 2, subtype 0
		widget "led_2" {
			name		"led_b_a"

			position	x = 584, y = 400
		}

		; Led type 2, subtype 1
		widget "led_2" {
			name		"led_b_b"
			type		1

			position	x = 584, y = 432
		}

		; Led type 2, subtype 2
		widget "led_2" {
			name		"led_b_c"
			type		2

			position	x = 584, y = 464
		}

		; Led type 2, subtype 3
		widget "led_2" {
			name		"led_b_d"
			type		3

			position	x = 584, y = 496
		}

		; Led type 2, subtype 4
		widget "led_2" {
			name		"led_b_e"
			type		4

			position	x = 584, y = 528
		}

		; Led type 2, subtype 5
		widget "led_2" {
			name		"led_b_f"
			type		5

			position	x = 584, y = 560
		}

		; Led type 3, subtype 0
		widget "led_3" {
			name		"led_c_a"

			position	x = 716, y = 396
		}

		; Led type 3, subtype 1
		widget "led_3" {
			name		"led_c_b"
			type		1

			position	x = 716, y = 428
		}

		; Led type 3, subtype 2
		widget "led_3" {
			name		"led_c_c"
			type		2

			position	x = 716, y = 460
		}

		; Led type 3, subtype 3
		widget "led_3" {
			name		"led_c_d"
			type		3

			position	x = 716, y = 492
		}

		; Led type 3, subtype 4
		widget "led_3" {
			name		"led_c_e"
			type		4

			position	x = 716, y = 524
		}

		; Led type 3, subtype 5
		widget "led_3" {
			name		"led_c_f"
			type		5

			position	x = 716, y = 556
		}

		; Pushbutton type 1, subtype 0
		widget "pushbutton_1" {
			name		"button_a"

			position	x = 514, y = 420

			title		"Red button", \
					size = 10, x = 0, y = -10

			action		push = cb_push_a
		}

		; Pushbutton type 2, subtype 1
		widget "pushbutton_2" {
			name		"button_b"
			type		1

			position	x = 510, y = 480

			title		"Yellow", \
					size = 10, x = 0, y = -10

			action		push = cb_push_b
		}

		; Pushbutton type 3, subtype 2
		widget "pushbutton_3" {
			name		"button_c"
			type		2

			position	x = 510, y = 548

			title		"Sticky", \
					size = 10, x = 0, y = -10

			sticky		yes

			action		push = cb_push_c
		}

		; Led for sticky button
		widget "led_1" {
			name		"led_button_c"
			type		3

			position	x = 654, y = 548

			title		"Sticky?", \
					size = 10, x = 0, y = -10
		}

		; Pushbutton type 1, subtype 3
		widget "pushbutton_1" {
			name		"button_d"
			type		3

			position	x = 646, y = 400

			action		push = cb_push_a
		}

		; Pushbutton type 1, subtype 4
		widget "pushbutton_1" {
			name		"button_e"
			type		4

			position	x = 646, y = 430

			action		push = cb_push_a
		}

		; Pushbutton type 1, subtype 5
		widget "pushbutton_1" {
			name		"button_f"
			type		5

			position	x = 646, y = 460

			action		push = cb_push_a
		}

		; Sliders
		widget "slideswitch" {
			name		"slider_a"
			type		1

			position	x = 70, y = 680

			slide		length = 100, start = 0, total = 100

			title		"Channel A", \
					size = 10, x = 0, y = -10

			trigger		release

			action		slide = cb_turn_a
		}

		widget "slideswitch" {
			name		"slider_b"
			type		1

			position	x = 170, y = 680

			slide		length = 100, start = 0, total = 100

			title		"Channel B", \
					size = 10, x = 0, y = -10

			trigger		release

			action		slide = cb_turn_a
		}

		widget "slideswitch" {
			name		"slider_c"
			type		3

			position	x = 280, y = 704

			slide		length = 100, start = 0, total = 100

			title		"Channel C", \
					size = 10, x = 0, y = -34

			trigger		release

			action		slide = cb_turn_a
		}

		widget "slideswitch" {
			name		"slider_d"
			type		3

			position	x = 360, y = 704

			slide		length = 100, start = 0, total = 100

			title		"Channel D", \
					size = 10, x = 0, y = -34

			trigger		release

			action		slide = cb_turn_a
		}

		widget "slideswitch" {
			name		"slider_e"
			type		5

			position	x = 470, y = 680

			slide		length = 100, start = 0, total = 100

			title		"Channel E", \
					size = 10, x = 0, y = -10

			trigger		release

			action		slide = cb_turn_a
		}

		widget "slideswitch" {
			name		"slider_f"
			type		5

			position	x = 550, y = 680

			slide		length = 100, start = 0, total = 100

			title		"Channel F", \
					size = 10, x = 0, y = -10

			trigger		release

			action		slide = cb_turn_a
		}

		widget "slideswitch" {
			name		"slider_g"
			type		0

			position	x = 650, y = 680

			slide		length = 50, start = 0, total = 100

			title		"More sliders", \
					size = 10, x = 0, y = -10

			trigger		release

			action		slide = cb_turn_a
		}

		widget "slideswitch" {
			name		"slider_h"
			type		0

			position	x = 650, y = 740

			slide		length = 50, start = 0, total = 100

			trigger		release

			action		slide = cb_turn_a
		}
	}
}

Copyright © 2024, Jani Salonen <salojan at goto10 piste co>. Piste is finnish word and means dot. All rights reserved.