class CTemplateCSSlider { CTemplateCSSlider *next,*last; U8 *name; I64 num; }; class CTemplateCS { CTemplateCSSlider *next_slider,*last_slider; I64 num_sliders,range,spacing,border; U8 *glbl_name; }; CTemplateCS *CtrlSliderGet() { CTemplateCSSlider *tmps; U8 *st,pmt[STR_LEN]; CTemplateCS *res=CAlloc(sizeof(CTemplateCS)); "$PURPLE$Ctrl Slider$FG$\n\n"; res->glbl_name=GetStr("Glbl Struct Name (ENTER for No Glbl):"); res->range=GetI64 ("Range (%4d):",30); res->spacing=GetI64("Spacing (%4d):",20); res->border=GetI64 ("Border (%4d):",2); res->next_slider=res->last_slider=&res->next_slider; while (TRUE) { StrPrint(pmt,"Slider #%d Name:",res->num_sliders+1); st=GetStr(pmt); if (!*st) { Free(st); break; } tmps=CAlloc(sizeof(CTemplateCSSlider)); tmps->name=st; QueIns(tmps,res->last_slider); tmps->num=res->num_sliders++; } return res; } U0 TemplateCtrlSlider(CDoc *doc) { CTask *task; CTemplateCS *m=NULL; CTemplateCSSlider *tmps; I64 i; DocUnlock(doc); DocRecalc(doc); DocCaptureUndo(doc,TRUE); task=User("CTemplateCS **_m=0x%X;*_m=CtrlSliderGet;\n",&m); while (!m) Yield; DocPrint(doc, "#define SLIDER_RANGE\t%d #define SLIDER_SPACING\t%d #define SLIDER_BORDER\t%d class CSliderState { ",m->range,m->spacing,m->border); tmps=m->next_slider; while (tmps!=&m->next_slider) { DocPrint(doc," I64 %s;\n",tmps->name); tmps=tmps->next; } if (*m->glbl_name) DocPrint(doc,"} %s;\n",m->glbl_name); else DocPrint(doc,"};\n"); DocPrint(doc, " U0 DrawCtrlSlider(CDC *dc,CCtrl *c) { CSliderState *s=c->state; dc->color=LTRED; GrRect(dc, c->left,c->top,%d*SLIDER_SPACING+%d,SLIDER_SPACING*2+SLIDER_RANGE); dc->color=BLUE; GrRect(dc, c->left+SLIDER_BORDER,c->top+SLIDER_BORDER, %d*SLIDER_SPACING+%d-2*SLIDER_BORDER,SLIDER_SPACING*2 +SLIDER_RANGE-2*SLIDER_BORDER); dc->color=BLACK; ",m->num_sliders+1,m->num_sliders,m->num_sliders+1,m->num_sliders); for (i=0; i<m->num_sliders; i++) DocPrint(doc, " GrLine(dc,c->left+%d*SLIDER_SPACING+%d,c->top+SLIDER_SPACING, c->left+%d*SLIDER_SPACING+%d,c->top+SLIDER_SPACING+SLIDER_RANGE-1); ",i+1,i,i+1,i); DocPrint(doc," dc->color=LTRED;\n"); tmps=m->next_slider; while (tmps!=&m->next_slider) { DocPrint(doc, " GrPrint(dc,c->left+%d*SLIDER_SPACING+%d-FONT_WIDTH/2, c->top+SLIDER_SPACING+SLIDER_RANGE+3, \"%%d\",s->%s*10/SLIDER_RANGE);\n", tmps->num+1,tmps->num,tmps->name); tmps=tmps->next; } tmps=m->next_slider; while (tmps!=&m->next_slider) { DocPrint(doc, " GrRect(dc,c->left+%d*SLIDER_SPACING+%d-3," "c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-2,7,5);\n", tmps->num+1,tmps->num,tmps->name); tmps=tmps->next; } DocPrint(doc," dc->color=YELLOW;\n"); tmps=m->next_slider; while (tmps!=&m->next_slider) { DocPrint(doc," GrRect(dc,c->left+%d*SLIDER_SPACING+%d-2," "c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-1,5,3);\n", tmps->num+1,tmps->num,tmps->name); tmps=tmps->next; } DocPrint(doc, "} U0 UpdateDerivedCtrlSlider(CCtrl *c) { CSliderState *s=c->state; c->left=c->win_task->pix_width/2-(SLIDER_SPACING*3+2)/2; c->right=c->left+%d*SLIDER_SPACING+%d; c->top=c->win_task->pix_height/2-(SLIDER_SPACING*2+SLIDER_RANGE)/2; c->bottom=c->top+SLIDER_SPACING*2+SLIDER_RANGE; ",m->num_sliders+1,m->num_sliders); tmps=m->next_slider; while (tmps!=&m->next_slider) { DocPrint(doc," s->%s=ClampI64(s->%s,0,SLIDER_RANGE-1);\n", tmps->name,tmps->name); tmps=tmps->next; } DocPrint(doc, "} U0 LeftClickSlider(CCtrl *c,I64 x,I64 y,Bool down) { no_warn down; CSliderState *s=c->state; "); tmps=m->next_slider; while (tmps!=&m->next_slider) { DocPrint(doc," "); if (tmps!=m->next_slider) DocPrint(doc,"else "); if (tmps->next==&m->next_slider) DocPrint(doc,"\n"); else DocPrint(doc,"if (x<c->left+%d*SLIDER_SPACING+%d+SLIDER_SPACING/2)\n", tmps->num+1,tmps->num); DocPrint(doc," s->%s=SLIDER_RANGE-1-(y-(c->top+SLIDER_SPACING));\n", tmps->name); tmps=tmps->next; } DocPrint(doc, " if (c->update_derived_vals) (*c->update_derived_vals)(c); } CCtrl *SliderNew() { CCtrl *c=CAlloc(sizeof(CCtrl)); c->win_task=Fs; c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS; c->type=CTRLT_GENERIC; "); if (*m->glbl_name) DocPrint(doc," c->state=&%s;\n" " MemSet(&%s,0,sizeof(CSliderState));\n",m->glbl_name,m->glbl_name); else DocPrint(doc, " c->state=CAlloc(sizeof(CSliderState));\n"); DocPrint(doc, " c->draw_it=&DrawCtrlSlider; c->left_click=&LeftClickSlider; c->update_derived_vals=&UpdateDerivedCtrlSlider; QueIns(c,Fs->last_ctrl); TaskDerivedValsUpdate; return c; } U0 SliderDel(CCtrl *c) { QueRem(c); "); if (!*m->glbl_name) DocPrint(doc," Free(c->state);\n"); DocPrint(doc, " Free(c); } "); Kill(task); //This frees memory. RegOneTimePopUp(ARf_MANAGE_SLIDER, "Modify the code to your heart's content.\n" "The code is no longer managed.\n"); DocLock(doc); }