mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-26 23:36:32 +00:00
95 lines
2.6 KiB
HolyC
Executable file
95 lines
2.6 KiB
HolyC
Executable file
#help_index "Graphics/Sprite;Sprites"
|
|
|
|
CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *head,I64 *_cur_elem_num)
|
|
{//For the side-bar
|
|
CSprite *res=CAlloc(sizeof(CSprite)),*tmpg;
|
|
CDocEntry *doc_e=doc->head.next;
|
|
Bool found=FALSE;
|
|
I64 num=0;
|
|
QueInit(res);
|
|
while (doc_e!=doc) {
|
|
if (doc_e->type_u8==DOCT_MENU_VAL && doc_e->left_exp>=0) {
|
|
tmpg=SpriteSetSettings(,head,doc_e->left_exp);
|
|
if (tmpg!=head) {
|
|
tmpg=MAllocIdent(tmpg);
|
|
BEqu(&tmpg->type,SPf_SEL,Bt(&doc_e->type,DOCEt_SEL));
|
|
if (*_cur_elem_num==doc_e->left_exp) {
|
|
*_cur_elem_num=num;
|
|
found=TRUE;
|
|
}
|
|
QueIns(tmpg,res->last);
|
|
num++;
|
|
}
|
|
}
|
|
doc_e=doc_e->next;
|
|
}
|
|
if (!found)
|
|
*_cur_elem_num=num;
|
|
QueDel(head);
|
|
Free(head);
|
|
return res;
|
|
}
|
|
|
|
U0 SpriteSideBarPickNew(CDoc *doc,CSprite *head,I64 old_num)
|
|
{
|
|
CSprite *tmpg;
|
|
CDocEntry *doc_cur_e=NULL,*doc_e;
|
|
I64 cur_elem_num=0;
|
|
U8 *st;
|
|
DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Sprite SideBar\"$$\n"
|
|
"$$LK+PU+CX,\"Click for Help\","
|
|
"A=\"FI:::/Doc/SpriteSideBar.DD\"$$\n\n");
|
|
tmpg=head->next;
|
|
while (tmpg!=head) {
|
|
st=SpriteElem2Summary(tmpg);
|
|
if (cur_elem_num==old_num)
|
|
doc_cur_e=doc_e=
|
|
DocPrint(doc,"$$LTRED$$$$MU-UL,\"%$$Q\",LE=%d$$\n",st,cur_elem_num++);
|
|
else
|
|
doc_e=DocPrint(doc,"$$LTBLUE$$$$MU-UL,\"%$$Q\",LE=%d$$\n",st,cur_elem_num++);
|
|
BEqu(&doc_e->de_flags,DOCEf_SEL,Bt(&tmpg->type,&SPf_SEL));
|
|
BEqu(&doc_e->type,DOCEt_SEL,Bt(&tmpg->type,SPf_SEL));
|
|
Free(st);
|
|
tmpg=tmpg->next;
|
|
}
|
|
if (cur_elem_num==old_num)
|
|
doc_cur_e=DocPrint(doc,"$$LTRED$$$$MU-UL,\"END\",LE=%d$$\n",cur_elem_num);
|
|
else
|
|
DocPrint(doc,"$$LTBLUE$$$$MU-UL,\"END\",LE=%d$$\n",cur_elem_num);
|
|
if (doc_cur_e)
|
|
doc->cur_entry=doc_cur_e;
|
|
}
|
|
|
|
U0 SpriteSideBarTask2(CTask *grand_parent)
|
|
{
|
|
I64 w,h;
|
|
CTask *parent=Fs->parent_task,*pu_task;
|
|
while (TRUE) {
|
|
pu_task=grand_parent->popup_task;
|
|
if (TaskValidate(pu_task)) {
|
|
w=parent->win_right-parent->win_left;
|
|
WinHorz(pu_task->win_right+2,pu_task->win_right+2+w,parent);
|
|
h=parent->win_bottom-parent->win_top;
|
|
WinVert(pu_task->win_top,pu_task->win_top+h,parent);
|
|
}
|
|
Refresh;
|
|
}
|
|
}
|
|
|
|
U0 SpriteSideBarTask(CTask *parent,CSprite **_head,I64 *_cur_elem_num)
|
|
{
|
|
CDocEntry *doc_e;
|
|
CDoc *doc=DocPut;
|
|
Spawn(&SpriteSideBarTask2,parent,"CSpriteTask",,Fs);
|
|
doc->flags|=DOCF_SIZE_MIN|DOCF_FORM;
|
|
while (TRUE) {
|
|
SpriteSideBarPickNew(doc,*_head,*_cur_elem_num);
|
|
DocHighlightCursor(,doc);
|
|
View;
|
|
doc_e=doc->cur_entry;
|
|
if (doc_e->type_u8==DOCT_MENU_VAL)
|
|
*_cur_elem_num=doc_e->left_exp;
|
|
*_head=SpriteSideBar2SpriteQue(doc,*_head,_cur_elem_num);
|
|
DocClear(doc);
|
|
}
|
|
}
|