#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);
	}
}
