templeos-info/public/Wb/Adam/Ctrls/CtrlsSlider.HC

215 lines
5.0 KiB
HolyC
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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