Exemplo n.º 1
0
void ARDrHoos::setTagParameterList(TagParameterList & tpl)
{
	if (ltpls.GetCount() == 0)
	{
		// create a list of string ...

		ListOfStrings lstrs; // (1); std::vector test impl
		lstrs.AddTail(
			(
			"I,inverse,0,o"));
		CreateListOfTPLs(ltpls,lstrs);

	}

	TagParameterList *rtpl = NULL;
	int ret = MatchListOfTPLsWithTPL(ltpls,tpl,&rtpl);

	if (ret>=0 && rtpl)
	{
		// we found a match!
		if (ret == 0)
		{
			// then, we now the match for
			// the first ParameterList
			// w, h, ml, mt, mr, mb
			GuidoPos pos = rtpl->GetHeadPosition();

			TagParameterInt * tpi =TagParameterInt::cast(rtpl->GetNext(pos));
			assert(tpi);

			if (tpi->pflag != TagParameter::NOTSET)
			{
				inverse = tpi->getValue();
			}

		}

		delete rtpl;
	}
	else
	{
		// failure
	}

	tpl.RemoveAll();

}
Exemplo n.º 2
0
void ARKey::setTagParameterList(TagParameterList & tpl)
{
	if (ltpls.GetCount() == 0)
	{
		// create a list of string ...
		ListOfStrings lstrs; // (1); std::vector test impl

		// either a key-string ("G") or a key-number key=3
		lstrs.AddTail(( "S,key,,r"));
		lstrs.AddTail(( "I,key,,r"));
		CreateListOfTPLs(ltpls,lstrs);
	}

	TagParameterList * rtpl = 0;
	int ret = MatchListOfTPLsWithTPL(ltpls,tpl,&rtpl);

	if( ret >= 0 && rtpl )
	{
		// we found a match!
		if (ret == 0)
		{
			// then, we now the match for the first ParameterList
			// w, h, ml, mt, mr, mb
			GuidoPos pos = rtpl->GetHeadPosition();

			TagParameterString * tps = TagParameterString::cast(rtpl->GetNext(pos));
			assert(tps);

			NVstring name = tps->getValue();

			// ist free-Tag gesetzt?
			if (name.substr(0, 5) == "free=" ) {
				mIsFree = true;
//				getKeyArray(name.substr(5, name.length()-5));
				newgetKeyArray (name.substr(5, name.length()-5));
			}
			else {
                if (name.size() == 0)
                    name = "C"; // C by default

				mIsFree = false;
				int t = (int)name[0];
				int major = (t == toupper(t));

				t = toupper(t);				
				switch (t) 
				{
					case 'F': 	fKeyNumber = -1;	break;
					case 'C': 	fKeyNumber = 0;	break;
					case 'G': 	fKeyNumber = 1;	break;
					case 'D': 	fKeyNumber = 2;	break;
					case 'A': 	fKeyNumber = 3;	break;
					case 'E': 	fKeyNumber = 4;	break;
					case 'H':
					case 'B':	fKeyNumber = 5;	break;
					default:
                        major = true;
                        fKeyNumber = 0;
				}
				
				if (!major)				fKeyNumber -= 3;		// minus 3 accidentals  (A-Major ->  a-minor ...)				
				if (name.length() > 1)
				{
					t = name[1];
					if (t == '#')		fKeyNumber += 7;
					else if (t == '&')	fKeyNumber -= 7;
				}
			}
		}
		else if (ret == 1)
		{
			// then, we now the match for the first ParameterList
			// w, h, ml, mt, mr, mb
			GuidoPos pos = rtpl->GetHeadPosition();
			TagParameterInt * tpi = TagParameterInt::cast(rtpl->GetNext(pos));
			assert(tpi);
			fKeyNumber = tpi->getValue();
		}
		delete rtpl;
	}
	else
	{
		// failure
	}
	tpl.RemoveAll();
}