Esempio n. 1
0
bool_t StreamGenExts(anynode* AnyNode,array* Exts, fourcc_t ClassFilter, const tchar_t* TypeFilter)
{
	fourcc_t* i;
	array List;
    ArrayInit(Exts);

    if (TypeFilter && !TypeFilter[0])
        TypeFilter = NULL;

	NodeEnumClass(AnyNode,&List,ClassFilter);
	for (i=ARRAYBEGIN(List,fourcc_t);i!=ARRAYEND(List,fourcc_t);++i)
	{
		const tchar_t* s = NodeStr2(AnyNode,*i,NODE_EXTS);
		while (s && s[0])
		{
            size_t n;
            for (n=0;s[n] && s[n]!=';' && s[n]!=':';++n) {}

            if (!TypeFilter || (s[n]==':' && tcschr(TypeFilter,s[n+1])!=NULL))
            {
                while (s[n] && s[n]!=';')
                    ++n;

                if (n)
                {
                    if (!ARRAYEMPTY(*Exts))
                        ArrayAppend(Exts,T(";"),sizeof(tchar_t),64);
                    ArrayAppend(Exts,s,n*sizeof(tchar_t),64);
                }
            }

            s = tcschr(s,';');
            if (s) ++s;
		}
	}
	ArrayClear(&List);

    if (!ARRAYEMPTY(*Exts) && !ArrayAppend(Exts,T("\0"),sizeof(tchar_t),64))
        ArrayClear(Exts);

    return !ARRAYEMPTY(*Exts);
}
Esempio n. 2
0
static int Init(settings* p)
{
	array List;
	int* i;

	p->Menu = WinMenuFind(&p->Win,SETTINGS_PAGES-1);
	p->Win.Flags &= ~(WIN_PROP_RESTART|WIN_PROP_SOFTRESET|WIN_PROP_RESYNC|WIN_PROP_CHANGED);

	NodeEnumClass(&List,NODE_CLASS);
	for (i=ARRAYBEGIN(List,int);i!=ARRAYEND(List,int);++i)
		if ((NodeClassDef(*i)->Flags & (CF_GLOBAL|CF_SETTINGS))==(CF_GLOBAL|CF_SETTINGS))
		{
			WinMenuInsert(&p->Win,p->Menu,SETTINGS_PAGES-1,SETTINGS_PAGES+p->Count,LangStr(*i,NODE_NAME));
			p->Node[p->Count++] = *i;
			if (p->Count==MAXPAGE)
				break;
		}

	ArrayClear(&List);

	WinMenuDelete(&p->Win,p->Menu,SETTINGS_PAGES-1);
	UpdatePage(p);
	return ERR_NONE;
}