File: QCallback.sc

package info (click to toggle)
supercollider 1%3A3.13.0%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 80,292 kB
  • sloc: cpp: 476,363; lisp: 84,680; ansic: 77,685; sh: 25,509; python: 7,909; makefile: 3,440; perl: 1,964; javascript: 974; xml: 826; java: 677; yacc: 314; lex: 175; objc: 152; ruby: 136
file content (43 lines) | stat: -rw-r--r-- 734 bytes parent folder | download | duplicates (5)
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
QCallback : QObject {
	var <action;

	*qtClass { ^'QtCollider::QcCallback'; }

	*new {
		|func|
		^super.new.action_(func)
	}

	*newFrom {
		|other|
		if (other.isKindOf(QCallback)) {
			^QCallback(other.action)
		} {
			^QCallback(other)
		}
	}

	action_{
		|newAction|
		if (newAction != action) {
			this.prOnCalledSignals.do({
				|signal|
				if (action.notNil) { this.disconnectFunction(signal.asSymbol, action) };
				if (newAction.notNil) { this.connectFunction(signal.asSymbol, { |func, v| newAction.(v) }, true) }
			});
			action = newAction;
		}
	}

	value {
		|...args|
		action.value(*args)
	}

	prOnCalledSignals {
		^this.methods(false, true, false).select({
			|sig|
			sig.asString.find("onCalled").notNil
		})
	}
}