changeset 32:06a2fdb333ca

Added visibilty control for tokens; removed token highlight when keyboard disabled.
author samer
date Wed, 15 Feb 2012 10:14:04 +0000
parents 417deb31dd4e
children b65035712713 5a6c5f3be3c6
files src/Voice.cpp src/Voice.h src/melodyTriangle.cpp src/melodyTriangle.h
diffstat 4 files changed, 47 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/src/Voice.cpp	Tue Feb 07 14:23:32 2012 +0000
+++ b/src/Voice.cpp	Wed Feb 15 10:14:04 2012 +0000
@@ -12,10 +12,13 @@
 inline static double min(double x,double y) { return (x<y) ? x : y; }
 
 Voice::Voice(int id): 
-	isActive(true), inTriangle(false), octave(0), amplitude(0.5), 
-	status(pending), id(id), posx(0), posy(0), truex(-1), truey(-1) {}
+	isActive(true), inTriangle(false), isVisible(true),
+	octave(0), amplitude(0.5), status(pending), id(id), 
+	posx(0), posy(0), truex(-1), truey(-1) {}
 
 void Voice::draw(bool highlight){
+	if (!isVisible) return;
+	
 	int r,g,b;
 	switch (status) {
 		case clear:   r=1; g=1; b=0; break;
@@ -34,10 +37,11 @@
 	ofNoFill();
 	if (highlight) ofSetColor(230, 230, 230);
 	ofCircle(posx, posy, RADIUS);
-
 }
 
 void Voice::draw_alt(bool highlight){
+	if (!isVisible) return;
+
 	int r,g,b;
 	switch (status) {
 		case clear:   r=1; g=1; b=0; break;
--- a/src/Voice.h	Tue Feb 07 14:23:32 2012 +0000
+++ b/src/Voice.h	Wed Feb 15 10:14:04 2012 +0000
@@ -29,6 +29,7 @@
 	
 	int    id;
 	int    posx,posy;
+	bool   isVisible;
 	bool   isActive;
 	bool   inTriangle;
 	int    octave;
--- a/src/melodyTriangle.cpp	Tue Feb 07 14:23:32 2012 +0000
+++ b/src/melodyTriangle.cpp	Wed Feb 15 10:14:04 2012 +0000
@@ -2,8 +2,10 @@
 #include <GLUT/GLUT.h> 
 
 #define BUFFER_ZONE 64 // have to drag this far to snap out of triange.
+#define NUM_TEMPI 9
 
-static int tempi[]={20,30,45,60,90,120,150,180};
+static int tempi[]={20,30,45,60,90,120,150,180,240};
+
 
 melodyTriangle::melodyTriangle(const char *host, int port, int numVoices, 
 							   bool enableKeys,int voiceIdOffset,int receivePort): 
@@ -121,7 +123,7 @@
 	ofTriangle(x1, y1, x2, y2, x3, y3);
 	
 	for (int i=numVoices-1; i>=0; i--){
-		voices[i]->draw(voices[i]->isInVoice(mouseX,mouseY));
+		voices[i]->draw(enableKeys && voices[i]->isInVoice(mouseX,mouseY));
 	}
 	
 	// display message if any
@@ -195,7 +197,7 @@
 					send("/tempo",tempi[tempoIndex]); 
 					break;
 				case '}': 
-					if (tempoIndex<7) tempoIndex++;
+					if (tempoIndex<NUM_TEMPI-1) tempoIndex++;
 					send("/tempo",tempi[tempoIndex]); 
 					break;
 					
@@ -223,7 +225,9 @@
 void melodyTriangle::voiceKeypress(Voice *v, int key) {
 	switch (key) {
 		case 'a':
-			send(v->isActive ? "/stop" : "/start", v->id);
+			if (v->inTriangle) {
+				send(v->isActive ? "/stop" : "/start", v->id);
+			}
 			v->isActive=!v->isActive;
 			break;
 		case OF_KEY_LEFT:  sendShift(v->id,-1,ratio); break;
@@ -305,6 +309,7 @@
 			string msg=msg_path.substr(8);
 			Voice *v=get_voice(m.getArgAsInt32(0));
 			
+			cout << "Received " << msg_path << "\n";
 			if (msg=="requested") 	 v->status=Voice::waiting;
 			else if (msg=="pending") v->status=Voice::pending;
 			else if (msg=="received") {
@@ -335,6 +340,10 @@
 			} else if (msg=="params") {
 				v->octave    = m.getArgAsInt32(1);
 				v->amplitude = m.getArgAsFloat(2);
+			} else if (msg=="visible") {
+				v->isVisible = m.getArgAsInt32(1);
+				if (voiceGrabbed==v && !v->isVisible) 
+					voiceGrabbed=NULL;
 			}
 		} else if (msg_path=="/display") {
 			display_msg=m.getArgAsString(0);
@@ -405,34 +414,9 @@
 	printf("sent /reply_to %i\n",receivePort);
 }
 
-void melodyTriangle::sendPeriod(int id, int num, int den){
-	ofxOscMessage m;
-	m.setAddress("/period");
-	m.addIntArg(id);
-	m.addIntArg(num);
-	m.addIntArg(den);
-	sender.sendMessage(m);
-	printf("sent /period %i %i %i\n",id,num,den);
-}
-
-void melodyTriangle::sendShift(int id, int num, int den){
-	ofxOscMessage m;
-	m.setAddress("/shift");
-	m.addIntArg(id);
-	m.addIntArg(num);
-	m.addIntArg(den);
-	sender.sendMessage(m);
-	printf("sent /shift %i %i %i\n",id,num,den);
-}
-
-void melodyTriangle::sendOctave(int id, int oct){
-	ofxOscMessage m;
-	m.setAddress("/octave");
-	m.addIntArg(id);
-	m.addIntArg(oct);
-	sender.sendMessage(m);
-	printf("sent /octave %i %i\n",id,oct);
-}
+void melodyTriangle::sendPeriod(int id, int num, int den){ send("/period",id,num,den); }
+void melodyTriangle::sendShift(int id, int num, int den) { send("/shift",id,num,den); }
+void melodyTriangle::sendOctave(int id, int oct){ send("/octave",id,oct); }
 
 void melodyTriangle::sendAmplitude(int id, float amp){
 	ofxOscMessage m;
@@ -443,6 +427,27 @@
 	printf("sent /amplitude %i %1.3f\n",id,amp);
 }
 
+void melodyTriangle::send(const char *addr, int a, int b, int c) {
+	ofxOscMessage m;
+	m.setAddress(addr);
+	m.addIntArg(a);
+	m.addIntArg(b);
+	m.addIntArg(c);
+	sender.sendMessage(m);
+	printf("sent %s %i\n",addr,a);
+}
+
+
+void melodyTriangle::send(const char *addr, int a, int b) {
+	ofxOscMessage m;
+	m.setAddress(addr);
+	m.addIntArg(a);
+	m.addIntArg(b);
+	sender.sendMessage(m);
+	printf("sent %s %i\n",addr,a);
+}
+
+
 void melodyTriangle::send(const char *addr, int a) {
 	ofxOscMessage m;
 	m.setAddress(addr);
--- a/src/melodyTriangle.h	Tue Feb 07 14:23:32 2012 +0000
+++ b/src/melodyTriangle.h	Wed Feb 15 10:14:04 2012 +0000
@@ -45,6 +45,8 @@
 	void sendAmplitude(int id, float amp);
 	void send(const char *msg);
 	void send(const char *msg, int a);
+	void send(const char *msg, int a, int b);
+	void send(const char *msg, int a, int b, int c);
 	void handleMessage(ofxOscMessage &m);
 	
 	bool clipToTriangle(int *cx, int *cy);