void RecursiveCreateTree(HTREEITEM parent, HTREEITEM pos, PROJECTITEM *proj) { while (proj) { TVInsertItem(prjTreeWindow, parent, pos, proj); ResAddItem(proj); if (proj->children) { RecursiveCreateTree(proj->hTreeItem, TVI_LAST, proj->children); TreeView_Expand(prjTreeWindow, proj->hTreeItem, proj->expanded ? TVE_EXPAND : TVE_COLLAPSE); } proj = proj->next; } }
PROJECTITEM *AddFile(PROJECTITEM *data, char *name, BOOL automatic) { PROJECTITEM *file; PROJECTITEM **ins; HTREEITEM pos = TVI_FIRST; char *p; if (file = HasFile(data, name)) return file; p = strrchr(name, '\\'); if (p) p ++; else p = name; if (data->type == PJ_PROJ && automatic) { if (!strnicmp(szInstallPath, name, strlen(szInstallPath))) { return NULL; } else { int i; for (i = 0; i < sizeof(extensionMap)/sizeof(extensionMap[0]); i++) { if (strlen(extensionMap[i][0]) < strlen(name) && !stricmp(name +strlen(name)- strlen(extensionMap[i][0]), extensionMap[i][0])) { data = CreateFolder(data, extensionMap[i][1], FALSE); break; } } } } ins = &data->children; while (*ins && (*ins)->type == PJ_FOLDER) { pos = (*ins)->hTreeItem; ins = &(*ins)->next; } while (*ins && stricmp((*ins)->displayName, p) < 0) { pos = (*ins)->hTreeItem; ins = &(*ins)->next; } file = RetrieveInternalDepend(name); if (!file) file = calloc(1, sizeof(PROJECTITEM)); if (file) { file->type = PJ_FILE; file->parent = data; strcpy(file->realName, name); strcpy(file->displayName, p); file->next = *ins; *ins = file; TVInsertItem(prjTreeWindow, data->hTreeItem, pos, file); ExpandParents(file); MarkChanged(file, FALSE); ResAddItem(file); } return file; }