📄 project.c
字号:
x->defineFlags = 0; // DEFINE_TONASM ;
}
}
}
}
//-------------------------------------------------------------------------
void DeleteDepends(DEPENDSLIST *l)
{
while (l)
{
DEPENDSLIST *n = l->next;
// if (l->treeHandle)
// TreeView_DeleteItem(treeWindow,l->treeHandle) ;
free(l);
l = n;
}
}
//-------------------------------------------------------------------------
void DeleteFiles(FILELIST *l)
{
while (l)
{
FILELIST *n = l->next;
DeleteDepends(l->depends);
if (l->treeHandle)
TreeView_DeleteItem(treeWindow, l->treeHandle);
free(l);
l = n;
}
}
//-------------------------------------------------------------------------
void ProjectDeleteFile(PROJLIST *p, int selected)
{
if (hwndProject)
{
int i;
FILELIST **y = &p->files, *x;
if (*y)
{
for (i = 1; i < selected; i++)
y = &(*y)->next;
x = *y;
*y = (*y)->next;
changedProject = TRUE;
DeleteDepends(x->depends);
TreeView_DeleteItem(treeWindow, x->treeHandle);
free(x);
}
}
}
//-------------------------------------------------------------------------
void ProjectDeleteDefines(DEFINES *defines)
{
while (defines)
{
DEFINES *y = defines->next;
free(defines);
defines = y;
}
}
//-------------------------------------------------------------------------
void ProjectDeleteTarget(PROJLIST *proj)
{
if (hwndProject)
{
int i;
PROJLIST **y = &projectList, *x;
while (*y && *y != proj)
y = &(*y)->next;
x = *y;
*y = (*y)->next;
DeleteFiles(x->files);
changedProject = TRUE;
TreeView_DeleteItem(treeWindow, x->treeHandle);
ProjectDeleteDefines(x->defines);
free(x);
}
}
//-------------------------------------------------------------------------
void ProjectFreeList(void)
{
TagEraseAllEntries();
hbpInit();
while (projectList)
{
PROJLIST *temp = projectList->next;
ProjectDeleteTarget(projectList);
projectList = temp;
}
changedProject = FALSE;
#ifdef HBREAK
hbpInit();
#endif
SendMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0);
// szProjectName[0] = 0 ;
}
//-------------------------------------------------------------------------
void ProjectNewList(PROJLIST *list)
{
projectList = list;
SendMessage(hwndFrame, WM_REDRAWTOOLBAR, 0, 0);
}
//-------------------------------------------------------------------------
static void sortDepends(DEPENDSLIST **aa, int count)
{
int i, j;
for (i = 0; i < count - 1; i++)
for (j = i + 1; j < count; j++)
if (stricmp(aa[i]->name, aa[j]->name) > 0)
{
DEPENDSLIST *l = aa[i];
aa[i] = aa[j];
aa[j] = l;
}
}
//-------------------------------------------------------------------------
void RefreshDepends(HWND hTree, PROJLIST *projlist)
{
PROJLIST *l = projlist;
DEPENDSLIST **aa = (DEPENDSLIST **)malloc(256 *sizeof(DEPENDSLIST*));
int max = 256, count = 0;
int i = 0;
HTREEITEM h = TVI_FIRST;
if (l->includeTreeHandle)
;
TreeView_DeleteItem(treeWindow, l->includeTreeHandle);
if (!aa)
return ;
l->includeTreeHandle = TVInitInsert(treeWindow, l->treeHandle, l
->sourceTreeHandle, "Include Files", FALSE);
{
FILELIST *m = l->files;
while (m)
{
DEPENDSLIST *n = m->depends;
while (n)
{
if (count == max)
{
max += 256;
aa = realloc(aa, max *sizeof(DEPENDSLIST*));
if (!aa)
return ;
}
aa[count++] = n;
n = n->next;
}
m = m->next;
}
}
sortDepends(aa, count);
for (i = 0; i < count; i++)
{
if (i && !stricmp(aa[i]->name, aa[i - 1]->name))
aa[i]->treeHandle = aa[i - 1]->treeHandle;
else
h = aa[i]->treeHandle = TVInitInsert(treeWindow, l
->includeTreeHandle, h, aa[i]->title, FALSE);
}
free(aa);
}
//-------------------------------------------------------------------------
static void InitItems(HWND hTree, PROJLIST *projlist)
{
PROJLIST *l = projlist;
int i = 0;
HTREEITEM h = TVI_FIRST;
TreeView_DeleteAllItems(hTree);
// targetRoot = TVInitInsert(hTree,TVI_ROOT,TVI_FIRST,"Targets", FALSE) ;
while (l)
{
int j = 0;
FILELIST *m = l->files;
HTREEITEM k = TVI_FIRST;
h = l->treeHandle = TVInitInsert(hTree, targetRoot, h, l->title, FALSE);
l->sourceTreeHandle = TVInitInsert(hTree, l->treeHandle, TVI_FIRST,
"Source Files", FALSE);
l->includeTreeHandle = TVInitInsert(hTree, l->treeHandle, l
->sourceTreeHandle, "Include Files", FALSE);
while (m)
{
HTREEITEM t = TVI_FIRST;
k = m->treeHandle = TVInitInsert(hTree, l->sourceTreeHandle, k, m
->title, FALSE);
m = m->next;
}
RefreshDepends(hTree, l);
l = l->next;
}
}
//-------------------------------------------------------------------------
int InsideRect(RECT *r, POINT *q)
{
if (r->left <= q->x && r->top <= q->y)
if (r->right > q->x && r->bottom > q->y)
{
return TRUE;
}
return FALSE;
}
//-------------------------------------------------------------------------
void FindItemByWind(HWND hwnd, PROJLIST **list, int *sel)
{
PROJLIST *l = projectList;
FILELIST *m;
DWINFO *info = (DWINFO*)GetWindowLong(hwnd, 0);
*list = 0;
if (!info)
return ;
while (l)
{
int i = 1;
m = l->files;
while (m)
{
if (!xstricmpz(m->name, info->dwName))
{
*list = l;
*sel = i;
return ;
}
i++;
m = m->next;
}
l = l->next;
}
}
//-------------------------------------------------------------------------
void FindItemByPoint(HWND hwnd, PROJLIST **list, int *pos, int *depend)
{
POINT q;
PROJLIST *l = *list = projectList;
GetCursorPos(&q);
ScreenToClient(hwnd, &q);
*pos = - 1;
*depend = 0;
if (!l)
return ;
while (l)
{
int i = 0;
RECT r;
FILELIST *m = l->files;
if (TreeView_GetItemRect(treeWindow, l->treeHandle, &r, 0))
{
if (InsideRect(&r, &q))
{
*pos = i;
*list = l;
return ;
}
}
if (TreeView_GetItemRect(treeWindow, l->sourceTreeHandle, &r, 0))
{
if (InsideRect(&r, &q))
{
*pos = - 2;
*list = l;
return ;
}
}
if (TreeView_GetItemRect(treeWindow, l->includeTreeHandle, &r, 0))
{
if (InsideRect(&r, &q))
{
*pos = - 3;
*list = l;
return ;
}
}
while (m)
{
int j = 0;
DEPENDSLIST *n = m->depends;
++i;
if (TreeView_GetItemRect(treeWindow, m->treeHandle, &r, 0))
{
if (InsideRect(&r, &q))
{
*pos = i;
*list = l;
return ;
}
}
while (n)
{
j++;
if (TreeView_GetItemRect(treeWindow, n->treeHandle, &r, 0))
{
if (InsideRect(&r, &q))
{
*pos = i;
*list = l;
*depend = j;
return ;
}
}
n = n->next;
}
m = m->next;
}
l = l->next;
}
}
//-------------------------------------------------------------------------
void FindItemBySelected(HWND hwnd, PROJLIST **list, int *pos, int *depend)
{
PROJLIST *l = *list = projectList;
*pos = - 1;
*depend = 0;
if (!l)
return ;
while (l)
{
int i = 0;
RECT r;
FILELIST *m = l->files;
if (treeViewSelected == l->treeHandle)
{
*pos = i;
*list = l;
return ;
}
if (treeViewSelected == l->sourceTreeHandle)
{
*pos = - 2;
*list = l;
return ;
}
if (treeViewSelected == l->includeTreeHandle)
{
*pos = - 3;
*list = l;
return ;
}
while (m)
{
int j = 0;
DEPENDSLIST *n = m->depends;
++i;
if (treeViewSelected == m->treeHandle)
{
*pos = i;
*list = l;
return ;
}
while (n)
{
j++;
if (treeViewSelected == n->treeHandle)
{
*pos = i;
*depend = j;
*list = l;
return ;
}
n = n->next;
}
m = m->next;
}
l = l->next;
}
}
//-------------------------------------------------------------------------
PROJLIST *ProjectFindSelectedEXE(void)
{
PROJLIST *l = projectList;
if (!hwndProject || !l)
return 0;
if (!l->next)
{
selectedProject = l;
return l;
}
/* Did they select a project in the project window? */
while (l)
{
FILELIST *m = l->files;
selectedProject = l;
if (l->buildFlags &BF_CHOSENPROJECT)
return l;
l = l->next;
}
/* no look for a selection */
l = projectList;
if (treeViewSelected == 0)
return 0;
while (l)
{
FILELIST *m = l->files;
selectedProject = l;
if (treeViewSelected == l->treeHandle)
return l;
while (m)
{
FILELIST *n = l->files;
if (treeViewSelected == m->treeHandle)
return l;
while (n)
{
if (treeViewSelected == n->treeHandle)
return l;
n = n->next;
}
m = m->next;
}
l = l->next;
}
return 0;
}
//-------------------------------------------------------------------------
void CollapseExpand(PROJLIST *selectedProj, int selectedItem, int flag)
{
if (selectedItem != - 1)
{
int i;
if (selectedItem == - 2)
TreeView_Expand(treeWindow, selectedProj->sourceTreeHandle, flag);
else if (selectedItem == - 3)
TreeView_Expand(treeWindow, selectedProj->includeTreeHandle, flag);
else if (selectedItem == 0)
TreeView_Expand(treeWindow, selectedProj->treeHandle, flag);
else
{
FILELIST *m = selectedProj->files;
for (i = 1; i < selectedItem; i++)
m = m->next;
TreeView_Expand(treeWindow, m->treeHandle, flag);
}
}
}
//-------------------------------------------------------------------------
LRESULT CALLBACK _export ProjectProc(HWND hwnd, UINT iMessage, WPARAM wParam,
LPARAM lParam)
{
static int selectedItem, selectedHeader;
int i;
PROJLIST *l;
RECT rs, *rt;
static PROJLIST *selectedProj;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -