Exemple #1
0
void NodeEnum(SceneEnumProc* se, INode* node){
	// For each child of this node, we recurse into ourselves
	// until no more children are found.
	for (int c = 0; c < node->NumberOfChildren(); c++){
		se->callback(node->GetChildNode(c));
		NodeEnum(se, node->GetChildNode(c));
	}
}
Exemple #2
0
SceneEnumProc::SceneEnumProc(INode *root_node, TimeValue t, Interface *ip) {
	time = t;
	count = 0;
	head = tail = NULL;
	for (int idx = 0; idx < root_node->NumberOfChildren(); idx++){
		this->callback(root_node->GetChildNode(idx));
		NodeEnum(this, root_node->GetChildNode(idx));
	}
}
Exemple #3
0
static void Info(win* Win,node* Node,winunit* y,int Name)
{
	int No;
	datadef DataDef;

	if (Name)
		WinPropLabel(Win,y,LangStr(MEDIAINFO_ID,Name),LangStr(Node->Class,NODE_NAME));

	for (No=0;NodeEnum(Node,No,&DataDef)==ERR_NONE;++No)
		if (!(DataDef.Flags & (DF_OUTPUT|DF_HIDDEN)))
		{
			tchar_t s[256];
			tick_t Tick;
			int i;
			bool_t Ok = 0;

			switch (DataDef.Type)
			{
			case TYPE_TICK:
				Ok = Node->Get(Node,DataDef.No,&Tick,sizeof(Tick))==ERR_NONE;
				TickToString(s,TSIZEOF(s),Tick,0,1,0);
				break;

			case TYPE_INT:
				Ok = Node->Get(Node,DataDef.No,&i,sizeof(i))==ERR_NONE;
				IntToString(s,TSIZEOF(s),i,(DataDef.Flags & DF_HEX)!=0);
				if (DataDef.Flags & DF_KBYTE)
					tcscat_s(s,TSIZEOF(s),T(" KB"));
				break;

			case TYPE_STRING:
				Ok = Node->Get(Node,DataDef.No,s,sizeof(s))==ERR_NONE;
				break;					
			}

			if (Ok)
				WinPropLabel(Win,y,DataDef.Name,s);
		}
}
Exemple #4
0
static void UpdatePage(settings* p)
{
	datadef DataDef;
	node* Node;
	bool_t Found = 0;
	int Class = Context()->SettingsPage;
	int No,i;
	winunit y;
	bool_t CheckList;
	tchar_t Data[MAXDATA/sizeof(tchar_t)];

#ifndef REGISTRY_GLOBAL
	if (p->Win.Flags & WIN_PROP_CHANGED)
	{
		p->Win.Flags &= ~WIN_PROP_CHANGED;
		if (p->Current)
			NodeRegSave(p->Current);
	}
#endif

	WinBeginUpdate(&p->Win);

	for (No=0;No<p->Count;++No)
	{
		if (p->Node[No]==Class)
			Found = 1;
		WinMenuCheck(&p->Win,p->Menu,SETTINGS_PAGES+No,p->Node[No]==Class);
	}

	if (!Found && p->Count>0)
		Class = p->Node[0];
	
	NodeDelete(p->Current);
	p->Current = Node = NodeCreate(Class);
	
	if (Node)
	{
		WinTitle(&p->Win,LangStr(Class,NODE_NAME));

		p->Win.LabelWidth = 
			(Class == PLATFORM_ID) ? 60:
			(p->Win.ScreenWidth < 130) ? 80:
			(Class == PLAYER_ID || Class == ADVANCED_ID) ? 120:90;

		CheckList = Class == ASSOCIATION_ID;
		y = 2;

		// if the menu is in bottom of screen. print a hint before platform settings (first page shown)
		if (Class == PLATFORM_ID && (p->Win.Flags & WIN_BOTTOMTOOLBAR) && !(p->Win.Flags & WIN_2BUTTON))
		{
			WinLabel(&p->Win,&y,-1,-1,LangStr(SETTINGS_ID,SETTINGS_HINT),PROPSIZE,0,NULL);
			y += 10;
		}

		for (No=0;NodeEnum(Node,No,&DataDef)==ERR_NONE;++No)
			if ((DataDef.Flags & DF_SETUP) && !(DataDef.Flags & DF_HIDDEN))
			{
				if (DataDef.Flags & DF_GAP)
					y += 7;

				if (!(DataDef.Flags & DF_RDONLY))
					WinPropValue(&p->Win,&y,Node,DataDef.No);
				else
				if (Node->Get(Node,DataDef.No,Data,DataDef.Size)==ERR_NONE)
				{
					switch (DataDef.Type)
					{
					case TYPE_LABEL:
						WinLabel(&p->Win,&y,-1,-1,DataDef.Name,PROPSIZE,0,NULL);
						break;

					case TYPE_TICK:
						TickToString(Data,TSIZEOF(Data),*(tick_t*)Data,0,1,0);
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;

					case TYPE_INT:
						i = *(int*)Data;

						if (DataDef.Flags & DF_ENUMCLASS)
							tcscpy_s(Data,TSIZEOF(Data),LangStr(i,NODE_NAME));
						else
						if (DataDef.Flags & DF_ENUMSTRING)
							tcscpy_s(Data,TSIZEOF(Data),LangStr(DataDef.Format1,i));
						else
							Data[0] = 0;

						if (!Data[0])
							IntToString(Data,TSIZEOF(Data),i,(DataDef.Flags & DF_HEX)!=0);
						if (DataDef.Flags & DF_KBYTE)
							tcscat_s(Data,TSIZEOF(Data),T(" KB"));
						if (DataDef.Flags & DF_MHZ)
							tcscat_s(Data,TSIZEOF(Data),T(" Mhz"));
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;

					case TYPE_STRING:
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;
						
					case TYPE_HOTKEY:
						HotKeyToString(Data,TSIZEOF(Data),*(int*)Data);
						WinPropLabel(&p->Win,&y,DataDef.Name,Data);
						break;
						
					case TYPE_BOOL:
						WinPropLabel(&p->Win,&y,DataDef.Name,
							LangStr(PLATFORM_ID,*(bool_t*)Data ? PLATFORM_YES:PLATFORM_NO));
						break;

					default:
						WinPropLabel(&p->Win,&y,DataDef.Name,NULL);
						break;
					}
				}
			}
	}

	WinEndUpdate(&p->Win);
}