hschumann2/TempleOS-Source-Code
0847
1 2#help_index "Graphics/Sprite;Sprites"3 4CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *head,I64 *_cur_elem_num)5{//For the side-bar6 CSprite *res=CAlloc(sizeof(CSprite)),*tmpg;7 CDocEntry *doc_e=doc->head.next;8 Bool found=FALSE;9 I64 num=0;10 QueInit(res);11 while (doc_e!=doc) {12 if (doc_e->type_u8==DOCT_MENU_VAL && doc_e->left_exp>=0) {13 tmpg=SpriteSetSettings(,head,doc_e->left_exp);14 if (tmpg!=head) {15 tmpg=MAllocIdent(tmpg);16 BEqu(&tmpg->type,SPf_SEL,Bt(&doc_e->type,DOCEt_SEL));17 if (*_cur_elem_num==doc_e->left_exp) {18 *_cur_elem_num=num;19 found=TRUE;20 }21 QueIns(tmpg,res->last);22 num++;23 }24 }25 doc_e=doc_e->next;26 }27 if (!found)28 *_cur_elem_num=num;29 QueDel(head);30 Free(head);31 return res;32}33 34U0 SpriteSideBarPickNew(CDoc *doc,CSprite *head,I64 old_num)35{36 CSprite *tmpg;37 CDocEntry *doc_cur_e=NULL,*doc_e;38 I64 cur_elem_num=0;39 U8 *st;40 DocPrint(doc,"$PURPLE$$TX+CX,\"Sprite SideBar\"$\n"41 "$LK+PU+CX,\"Click for Help\","42 "A=\"FI:::/Doc/SpriteSideBar.DD.Z\"$\n\n");43 tmpg=head->next;44 while (tmpg!=head) {45 st=SpriteElem2Summary(tmpg);46 if (cur_elem_num==old_num)47 doc_cur_e=doc_e=48 DocPrint(doc,"$LTRED$$MU-UL,\"%$Q\",LE=%d$\n",st,cur_elem_num++);49 else50 doc_e=DocPrint(doc,"$LTBLUE$$MU-UL,\"%$Q\",LE=%d$\n",st,cur_elem_num++);51 BEqu(&doc_e->de_flags,DOCEf_SEL,Bt(&tmpg->type,&SPf_SEL));52 BEqu(&doc_e->type,DOCEt_SEL,Bt(&tmpg->type,SPf_SEL));53 Free(st);54 tmpg=tmpg->next;55 }56 if (cur_elem_num==old_num)57 doc_cur_e=DocPrint(doc,"$LTRED$$MU-UL,\"END\",LE=%d$\n",cur_elem_num);58 else59 DocPrint(doc,"$LTBLUE$$MU-UL,\"END\",LE=%d$\n",cur_elem_num);60 if (doc_cur_e)61 doc->cur_entry=doc_cur_e;62}63 64U0 SpriteSideBarTask2(CTask *grand_parent)65{66 I64 w,h;67 CTask *parent=Fs->parent_task,*pu_task;68 while (TRUE) {69 pu_task=grand_parent->popup_task;70 if (TaskValidate(pu_task)) {71 w=parent->win_right-parent->win_left;72 WinHorz(pu_task->win_right+2,pu_task->win_right+2+w,parent);73 h=parent->win_bottom-parent->win_top;74 WinVert(pu_task->win_top,pu_task->win_top+h,parent);75 }76 Refresh;77 }78}79 80U0 SpriteSideBarTask(CTask *parent,CSprite **_head,I64 *_cur_elem_num)81{82 CDocEntry *doc_e;83 CDoc *doc=DocPut;84 Spawn(&SpriteSideBarTask2,parent,"CSpriteTask",,Fs);85 doc->flags|=DOCF_SIZE_MIN|DOCF_FORM;86 while (TRUE) {87 SpriteSideBarPickNew(doc,*_head,*_cur_elem_num);88 DocHighlightCursor(,doc);89 View;90 doc_e=doc->cur_entry;91 if (doc_e->type_u8==DOCT_MENU_VAL)92 *_cur_elem_num=doc_e->left_exp;93 *_head=SpriteSideBar2SpriteQue(doc,*_head,_cur_elem_num);94 DocClear(doc);95 }96}97 