#help_index "Graphics/Sprite;Sprites" CSprite *SpriteSideBar2SpriteQueue(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; QueueInit(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); BEqual(&tmpg->type, SPf_SEL, Bt(&doc_e->type, DOCEt_SEL)); if (*_cur_elem_num == doc_e->left_exp) { *_cur_elem_num = num; found = TRUE; } QueueInsert(tmpg, res->last); num++; } } doc_e = doc_e->next; } if (!found) *_cur_elem_num = num; QueueDel(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++); BEqual(&doc_e->de_flags, DOCEf_SEL, Bt(&tmpg->type, &SPf_SEL)); BEqual(&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 = SpriteSideBar2SpriteQueue(doc, *_head, _cur_elem_num); DocClear(doc); } }