aboutsummaryrefslogtreecommitdiff
path: root/lib/GUI/TkWidget.rakumod
blob: dc77c27047ce937f41e5a7434a81b3b0b799c55f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#! /usr/bin/env false

use v6.d;

use GUI::TkWidgetCompiled;

unit role GUI::TkWidget;

has $.path;

#| Create a new TkWidget.
method new (
	#| The path to refer to this particular widget.
	$path,

	#| Any additional options passed to the widget.
	*%options
) {
	self.bless(
		:$path,
		|%options,
	)
}

#| Compile a TkWidget into its command form.
multi method compile (
	--> GUI::TkWidgetCompiled
) {
	my @options;

	for self.^attributes(:local) {
		my $name = $_.name.substr(2..*);

		# Filter out any attributes that should not be passed as
		# options.
		next unless $name ∉ < path >;

		my $value = $_.get_value(self);

		# Only pass an attribute as option if it is actually set.
		next unless $value.DEFINITE;

		@options.append("-{$name} {$value.raku}");
	}

	GUI::TkWidgetCompiled.new(
		command => "{self.type} $!path {@options.join(' ')}",
	);
}

multi method compile (GUI::TkWidget: $widget) {
}

=begin pod

=NAME    GUI::TkWidget
=VERSION 0.0.0
=AUTHOR  Patrick Spek <p.spek@tyil.nl>

=begin LICENSE
Copyright © 2020

This program is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option) any
later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
details.

You should have received a copy of the GNU Affero General Public License along
with this program.  If not, see http://www.gnu.org/licenses/.
=end LICENSE

=end pod

# vim: ft=raku noet sw=8 ts=8