EZRanger NdefParamGui

hey,

how can i create a NdefParamGui where some of the parameters like freq (freqLo and freqHi) and overlap (overlapLo and overlapHi) get an EZRanger and some others like tFreq just a normal slider. i would like to place the NdefGui with some other GUIs for modulation on a main window.

(
var multiChannelTrigger = { |numChannels, trig|
	numChannels.collect{ |chan|
		PulseDivider.ar(trig, numChannels, chan);
	};
};

var multiChannelPhase = { |triggers, rates|
	triggers.collect{ |localTrig, i|
		var hasTriggered = PulseCount.ar(localTrig) > 0;
		Sweep.ar(localTrig, rates[i] * hasTriggered);
	};
};

var multiChannelDemand = { |triggers, demandUgen|
	var demand = demandUgen;
	triggers.collect{ |localTrig|
		Demand.ar(localTrig, 0, demand)
	};
};

var hanningWindow = { |phase|
	(1 - (phase * 2pi).cos) / 2 * (phase < 1);
};

SynthDef(\simplePulsar, {
	
	var numChannels = 5;
	
	var tFreq, trig, triggers;
	var grainFreqs, overlaps, maxOverlaps, windowRates;
	var windowPhases, grainWindows, pulsaretPhases, pulsarets, sig;
	
	tFreq = \tFreq.kr(5);
	trig = Impulse.ar(tFreq);
	
	triggers = multiChannelTrigger.(numChannels, trig);
	
	grainFreqs = multiChannelDemand.(triggers, Dwhite(0, 1)).linexp(0, 1, \freqLo.kr(1000), \freqHi.kr(1000));
	overlaps = multiChannelDemand.(triggers, Dwhite(0, 1)).linexp(0, 1, \overlapLo.kr(1), \overlapHi.kr(1));
	
	maxOverlaps = min(overlaps, numChannels * (grainFreqs / tFreq));
	windowRates = grainFreqs / maxOverlaps;
	
	windowPhases = multiChannelPhase.(triggers, windowRates);
	grainWindows = hanningWindow.(windowPhases);
	
	pulsaretPhases = multiChannelPhase.(triggers, grainFreqs);
	pulsarets = sin(pulsaretPhases * 2pi);
	
	pulsarets = pulsarets * grainWindows;
	pulsarets = PanAz.ar(2, pulsarets, 0);
	sig = pulsarets.sum;
	
	sig = sig * \amp.kr(-25.dbamp);
	
	sig = LeakDC.ar(sig);
	OffsetOut.ar(\out.kr(0), sig);
}).add;
)

~simplePulsar = ~simplePulsar ? ();
~simplePulsar[\name] = \simplePulsar;

Ndef(~simplePulsar[\name]).prime(\simplePulsar);

i have compied this from one TdefGui example and trying to make it work for my use case:

(
q = q ? ();

// some globals
q.paramRNames = [\freqRange, \durRange, \densRange, \ampRange, \panRange];
q.paramNames = [\freq, \grDur, \dens, \amp, \pan];

q.makeSynthGUI = { |q, ndef, posPoint|
	var w, ezRangers;

	posPoint = posPoint ? 150@600;	// where to put the gui window

	w = Window.new("simplePulsar",
		Rect.fromPoints(posPoint, (posPoint + (400@300)))).front;
	w.view.decorator_(FlowLayout(w.bounds.copy.moveTo(0, 0)));

	w.view.decorator.nextLine;

	// a just in time - gui for the Tdef
	z = NdefParamGui(ndef, parent: w);

	w.view.decorator.nextLine;

	// the range sliders display the current values
	ezRangers = ();

	q.paramRNames.do { |name, i|
		ezRangers.put(name,
		EZRanger(w, 400@20, name, q.paramNames[i],
			{ |sl| ndef.envir.current[name] = sl.value; },
			ndef.envir.current[name], labelWidth: 70, numberWidth: 50, unitWidth: 10)
			.round_([0.1, 0.00001, 0.0001, 0.0001, 0.01][i])
		);
	};

};

q.makeSynthGUI(Ndef(\simplePulsar))
)