Phi: nicer scroll animation for METAR widget
[fg:fgdata.git] / Nasal / canvas / PropertyElement.nas
1 # PropertyElement
2 # ==============================================================================
3 # Baseclass for all property controlled elements/objects
4 #
5 var PropertyElement = {
6   # Constructor
7   #
8   # @param node     Node to be used for element or vector [parent, type] for
9   #                 creation of a new node with name type and given parent
10   # @param id       ID/Name (Should be unique)
11   new: func(node, id)
12   {
13     if( typeof(node) == 'vector' )
14       var node = aircraft.makeNode(node[0]).addChild(node[1], 0, 0);
15     else
16       var node = aircraft.makeNode(node);
17
18     if( !isa(node, props.Node) )
19       return debug.warn("Not a props.Node!");
20
21     var m = {
22       parents: [PropertyElement],
23       _node: node
24     };
25
26     if( id != nil )
27       m.set("id", id);
28
29     return m;
30   },
31   # Destructor (has to be called manually!)
32   del: func()
33   {
34     me._node.remove();
35   },
36   set: func(key, value)
37   {
38     me._node.getNode(key, 1).setValue(value);
39     return me;
40   },
41   setBool: func(key, value)
42   {
43     me._node.getNode(key, 1).setBoolValue(value);
44     return me;
45   },
46   setDouble: func(key, value)
47   {
48     me._node.getNode(key, 1).setDoubleValue(value);
49     return me;
50   },
51   setInt: func(key, value)
52   {
53     me._node.getNode(key, 1).setIntValue(value);
54     return me;
55   },
56   get: func(key, default = nil)
57   {
58     var node = me._node.getNode(key);
59     if( node != nil )
60       return node.getValue();
61     else
62       return default;
63   },
64   getBool: func(key)
65   {
66     me._node.getNode(key, 1).getBoolValue();
67   },
68   # Trigger an update of the element
69   #
70   # Elements are automatically updated once a frame, with a delay of one frame.
71   # If you wan't to get an element updated in the current frame you have to use
72   # this method.
73   update: func
74   {
75     me.setBool("update", 1);
76   }
77 };