hschumann2/TempleOS-Source-Code
0847
1 2class CTemplateCSSlider3{4 CTemplateCSSlider *next,*last;5 U8 *name;6 I64 num;7};8 9class CTemplateCS10{11 CTemplateCSSlider *next_slider,*last_slider;12 I64 num_sliders,range,spacing,border;13 U8 *glbl_name;14};15 16CTemplateCS *CtrlSliderGet()17{18 CTemplateCSSlider *tmps;19 U8 *st,pmt[STR_LEN];20 CTemplateCS *res=CAlloc(sizeof(CTemplateCS));21 22 "$PURPLE$Ctrl Slider$FG$\n\n";23 24 res->glbl_name=GetStr("Glbl Struct Name (ENTER for No Glbl):");25 res->range=GetI64 ("Range (%4d):",30);26 res->spacing=GetI64("Spacing (%4d):",20);27 res->border=GetI64 ("Border (%4d):",2);28 29 res->next_slider=res->last_slider=&res->next_slider;30 while (TRUE) {31 StrPrint(pmt,"Slider #%d Name:",res->num_sliders+1);32 st=GetStr(pmt);33 if (!*st) {34 Free(st);35 break;36 }37 tmps=CAlloc(sizeof(CTemplateCSSlider));38 tmps->name=st;39 QueIns(tmps,res->last_slider);40 tmps->num=res->num_sliders++;41 }42 return res;43}44 45U0 TemplateCtrlSlider(CDoc *doc)46{47 CTask *task;48 CTemplateCS *m=NULL;49 CTemplateCSSlider *tmps;50 I64 i;51 52 DocUnlock(doc);53 DocRecalc(doc);54 DocCaptureUndo(doc,TRUE);55 56 task=User("CTemplateCS **_m=0x%X;*_m=CtrlSliderGet;\n",&m);57 while (!m)58 Yield;59 60 DocPrint(doc,61"#define SLIDER_RANGE\t%d62#define SLIDER_SPACING\t%d63#define SLIDER_BORDER\t%d64 65class CSliderState66{67",m->range,m->spacing,m->border);68 69 tmps=m->next_slider;70 while (tmps!=&m->next_slider) {71 DocPrint(doc," I64 %s;\n",tmps->name);72 tmps=tmps->next;73 }74 if (*m->glbl_name)75 DocPrint(doc,"} %s;\n",m->glbl_name);76 else77 DocPrint(doc,"};\n");78 79 DocPrint(doc,80"81U0 DrawCtrlSlider(CDC *dc,CCtrl *c)82{83 CSliderState *s=c->state;84 85 dc->color=LTRED;86 GrRect(dc, c->left,c->top,%d*SLIDER_SPACING+%d,SLIDER_SPACING*2+SLIDER_RANGE);87 dc->color=BLUE;88 GrRect(dc, c->left+SLIDER_BORDER,c->top+SLIDER_BORDER,89 %d*SLIDER_SPACING+%d-2*SLIDER_BORDER,SLIDER_SPACING*290 +SLIDER_RANGE-2*SLIDER_BORDER);91 dc->color=BLACK;92",m->num_sliders+1,m->num_sliders,m->num_sliders+1,m->num_sliders);93 94 for (i=0;i<m->num_sliders;i++)95 DocPrint(doc,96" GrLine(dc,c->left+%d*SLIDER_SPACING+%d,c->top+SLIDER_SPACING,97 c->left+%d*SLIDER_SPACING+%d,c->top+SLIDER_SPACING+SLIDER_RANGE-1);98",i+1,i,i+1,i);99 100 DocPrint(doc," dc->color=LTRED;\n");101 102 tmps=m->next_slider;103 while (tmps!=&m->next_slider) {104 DocPrint(doc,105" GrPrint(dc,c->left+%d*SLIDER_SPACING+%d-FONT_WIDTH/2,106 c->top+SLIDER_SPACING+SLIDER_RANGE+3,107 \"%%d\",s->%s*10/SLIDER_RANGE);\n",108 tmps->num+1,tmps->num,tmps->name);109 tmps=tmps->next;110 }111 112 tmps=m->next_slider;113 while (tmps!=&m->next_slider) {114 DocPrint(doc,115 " GrRect(dc,c->left+%d*SLIDER_SPACING+%d-3,"116 "c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-2,7,5);\n",117 tmps->num+1,tmps->num,tmps->name);118 tmps=tmps->next;119 }120 DocPrint(doc," dc->color=YELLOW;\n");121 122 tmps=m->next_slider;123 while (tmps!=&m->next_slider) {124 DocPrint(doc," GrRect(dc,c->left+%d*SLIDER_SPACING+%d-2,"125 "c->top+SLIDER_SPACING+SLIDER_RANGE-1-s->%s-1,5,3);\n",126 tmps->num+1,tmps->num,tmps->name);127 tmps=tmps->next;128 }129 DocPrint(doc,130"}131 132U0 UpdateDerivedCtrlSlider(CCtrl *c)133{134 CSliderState *s=c->state;135 c->left=c->win_task->pix_width/2-(SLIDER_SPACING*3+2)/2;136 c->right=c->left+%d*SLIDER_SPACING+%d;137 c->top=c->win_task->pix_height/2-(SLIDER_SPACING*2+SLIDER_RANGE)/2;138 c->bottom=c->top+SLIDER_SPACING*2+SLIDER_RANGE;139",m->num_sliders+1,m->num_sliders);140 141 tmps=m->next_slider;142 while (tmps!=&m->next_slider) {143 DocPrint(doc," s->%s=ClampI64(s->%s,0,SLIDER_RANGE-1);\n",144 tmps->name,tmps->name);145 tmps=tmps->next;146 }147 DocPrint(doc,148"}149 150U0 LeftClickSlider(CCtrl *c,I64 x,I64 y,Bool down)151{152 no_warn down;153 CSliderState *s=c->state;154");155 156 tmps=m->next_slider;157 while (tmps!=&m->next_slider) {158 DocPrint(doc," ");159 if (tmps!=m->next_slider)160 DocPrint(doc,"else ");161 if (tmps->next==&m->next_slider)162 DocPrint(doc,"\n");163 else164 DocPrint(doc,"if (x<c->left+%d*SLIDER_SPACING+%d+SLIDER_SPACING/2)\n",165 tmps->num+1,tmps->num);166 DocPrint(doc," s->%s=SLIDER_RANGE-1-(y-(c->top+SLIDER_SPACING));\n",167 tmps->name);168 tmps=tmps->next;169 }170 171 DocPrint(doc,172" if (c->update_derived_vals)173 (*c->update_derived_vals)(c);174}175 176CCtrl *SliderNew()177{178 CCtrl *c=CAlloc(sizeof(CCtrl));179 c->win_task=Fs;180 c->flags=CTRLF_SHOW|CTRLF_CAPTURE_LEFT_MS;181 c->type=CTRLT_GENERIC;182");183 if (*m->glbl_name)184 DocPrint(doc," c->state=&%s;\n"185 " MemSet(&%s,0,sizeof(CSliderState));\n",m->glbl_name,m->glbl_name);186 else187 DocPrint(doc, " c->state=CAlloc(sizeof(CSliderState));\n");188 DocPrint(doc,189" c->draw_it=&DrawCtrlSlider;190 c->left_click=&LeftClickSlider;191 c->update_derived_vals=&UpdateDerivedCtrlSlider;192 QueIns(c,Fs->last_ctrl);193 TaskDerivedValsUpdate;194 return c;195}196 197U0 SliderDel(CCtrl *c)198{199 QueRem(c);200");201 if (!*m->glbl_name)202 DocPrint(doc," Free(c->state);\n");203 DocPrint(doc,204" Free(c);205}206");207 208 Kill(task); //This frees memory.209 210 RegOneTimePopUp(ARf_MANAGE_SLIDER,211 "Modify the code to your heart's content.\n"212 "The code is no longer managed.\n");213 214 DocLock(doc);215}216 