shithub: guifs

ref: c51962a648b3f38fc378ad0081b1d1aa037142d5
dir: guifs/test.rc

View raw version
#!/bin/rc

delay=0.1

dir=/mnt/gui

# split the window vertically into two, and make the top one a textbox
echo vertical >> $dir/props/orientation
textdir=$dir/`{cat $dir/clone}
echo textbox >> $textdir/type

fn show {
	echo -n $* >> $textdir/props/text
}

dir=$dir/`{cat $dir/clone}

colours=(FF0000 00FF00 0000FF FFFF00 00FFFF FF00FF FFFFFF 333333)
for(colour in $colours){
	dir=$dir/`{cat $dir/clone}			# Create a new sub element in the gui (for now, always a "container")
	echo $colour^FF >> $dir/props/background	# Set the background
	show 'setting background of '^$dir^' to 0x'^$colour
	sleep $delay					# Wait a bit
}

# Now do the same, but don't nest the elements
for(colour in $colours){
	subdir=$dir/`{cat $dir/clone}
	echo $colour^FF >> $subdir/props/background
	show 'setting background of '^$subdir^' to 0x'^$colour
	sleep $delay
}

# Add some padding to all elements
for(f in `{walk /mnt/gui/ | grep 'padding$'}){
	echo 10 >> $f
	show 'echo 10 >> '^$f
	sleep $delay
}

# Add a border to the innermost elements
for(f in `{walk /mnt/gui | grep $dir'/[0-9]+/props/border$'}){
	echo 8888CCFF >> $f^colour
	echo 5 >> $f
	show 'echo 5 >> '^$f
	sleep $delay
}

# Add some margin to the innermost elements
for(f in `{walk /mnt/gui | grep $dir'/[0-9]+/props/margin'}){
	echo 5 >> $f
	show 'echo 5 >> '^$f
	sleep $delay
}

# Make the inner container vertical
echo vertical >> $dir/props/orientation
show 'echo vertical >> '^$dir/props/orientation

fn printevents {
	while(event = `''{read}){
		show $1': '$event
	}
}

# Attach an event printer to the innermost elements
for(f in `{walk /mnt/gui | grep $dir'/[0-9]+/event'}){
	printevents $f <$f >[2]/dev/null &
}

# Create a right-click menu on the text field
echo 'R/this is a/right click/menu' >> /mnt/gui/0/props/menus
# Also attach an event printer to the text field
printevents 'text field' </mnt/gui/0/event >[2]/dev/null &

wait