#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.Z\"$\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);
  }
}