⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macctrls.c

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	mc->text.tbctrl = NewControl(window, &bounds, NULL, FALSE, 0, 0, 0,				     kControlStaticTextProc, (long)mc);	SetControlData(mc->text.tbctrl, kControlEntireControl,		       kControlStaticTextTextTag,		       strlen(ctrl->text.label), ctrl->text.label);	GetControlData(mc->text.tbctrl, kControlEntireControl,		       kControlStaticTextTextHeightTag,		       sizeof(height), &height, &olen);    }#if !TARGET_API_MAC_CARBON    else {	TEHandle te;	mc->text.tbctrl = NewControl(window, &bounds, NULL, FALSE, 0, 0, 0,				     SYS7_TEXT_PROC, (long)mc);	te = (TEHandle)(*mc->text.tbctrl)->contrlData;	TESetText(ctrl->text.label, strlen(ctrl->text.label), te);	height = TEGetHeight(1, (*te)->nLines, te);    }#endif    SizeControl(mc->text.tbctrl, curstate->width, height);    curstate->pos.v += height + 6;    add234(mcs->byctrl, mc);    mc->generic.next = mcs->panels[curstate->panelnum];    mcs->panels[curstate->panelnum] = mc;}static void macctrl_editbox(struct macctrls *mcs, WindowPtr window,			    struct mac_layoutstate *curstate,			    union control *ctrl){    union macctrl *mc = snew(union macctrl);    Rect lbounds, bounds;    mc->generic.type = MACCTRL_EDITBOX;    mc->generic.ctrl = ctrl;    mc->generic.privdata = NULL;    lbounds.left = curstate->pos.h;    lbounds.top = curstate->pos.v;    if (ctrl->editbox.percentwidth == 100) {	if (ctrl->editbox.label != NULL) {	    lbounds.right = lbounds.left + curstate->width;	    lbounds.bottom = lbounds.top + 16;	    curstate->pos.v += 18;	}	bounds.left = curstate->pos.h;	bounds.right = bounds.left + curstate->width;    } else {	lbounds.right = lbounds.left +	    curstate->width * (100 - ctrl->editbox.percentwidth) / 100;	lbounds.bottom = lbounds.top + 22;	bounds.left = lbounds.right;	bounds.right = lbounds.left + curstate->width;    }    bounds.top = curstate->pos.v;    bounds.bottom = bounds.top + 22;    if (mac_gestalts.apprvers >= 0x100) {	if (ctrl->editbox.label == NULL)	    mc->editbox.tblabel = NULL;	else {	    mc->editbox.tblabel = NewControl(window, &lbounds, NULL, FALSE,					     0, 0, 0, kControlStaticTextProc,					     (long)mc);	    SetControlData(mc->editbox.tblabel, kControlEntireControl,			   kControlStaticTextTextTag,			   strlen(ctrl->editbox.label), ctrl->editbox.label);	}	InsetRect(&bounds, 3, 3);	mc->editbox.tbctrl = NewControl(window, &bounds, NULL, FALSE, 0, 0, 0,					ctrl->editbox.password ?					kControlEditTextPasswordProc :					kControlEditTextProc, (long)mc);    }#if !TARGET_API_MAC_CARBON    else {	if (ctrl->editbox.label == NULL)	    mc->editbox.tblabel = NULL;	else {	    mc->editbox.tblabel = NewControl(window, &lbounds, NULL, FALSE,					     0, 0, 0, SYS7_TEXT_PROC,					     (long)mc);	    TESetText(ctrl->editbox.label, strlen(ctrl->editbox.label),		      (TEHandle)(*mc->editbox.tblabel)->contrlData);	}	mc->editbox.tbctrl = NewControl(window, &bounds, NULL, FALSE, 0, 0, 0,					SYS7_EDITBOX_PROC, (long)mc);    }#endif    curstate->pos.v += 28;    add234(mcs->byctrl, mc);    mc->generic.next = mcs->panels[curstate->panelnum];    mcs->panels[curstate->panelnum] = mc;    ctrlevent(mcs, mc, EVENT_REFRESH);}#if !TARGET_API_MAC_CARBONstatic pascal SInt32 macctrl_sys7_editbox_cdef(SInt16 variant,					       ControlRef control,					       ControlDefProcMessage msg,					       SInt32 param){    RgnHandle rgn;    Rect rect;    TEHandle te;    long ssfs;    Point mouse;    switch (msg) {      case initCntl:	rect = (*control)->contrlRect;	if (variant == SYS7_EDITBOX_VARIANT)	    InsetRect(&rect, 3, 3); /* 2 if it's 20 pixels high */	te = TENew(&rect, &rect);	ssfs = GetScriptVariable(smSystemScript, smScriptSysFondSize);	(*te)->txSize = LoWord(ssfs);	(*te)->txFont = HiWord(ssfs);	(*control)->contrlData = (Handle)te;	return noErr;      case dispCntl:	TEDispose((TEHandle)(*control)->contrlData);	return 0;      case drawCntl:	if ((*control)->contrlVis) {	    rect = (*control)->contrlRect;	    if (variant == SYS7_EDITBOX_VARIANT) {		PenNormal();		FrameRect(&rect);		InsetRect(&rect, 3, 3);	    }	    EraseRect(&rect);	    (*(TEHandle)(*control)->contrlData)->viewRect = rect;	    TEUpdate(&rect, (TEHandle)(*control)->contrlData);	}	return 0;      case testCntl:	if (variant == SYS7_TEXT_VARIANT)	    return kControlNoPart;	mouse.h = LoWord(param);	mouse.v = HiWord(param);	rect = (*control)->contrlRect;	InsetRect(&rect, 3, 3);	return PtInRect(mouse, &rect) ? kControlEditTextPart : kControlNoPart;      case calcCRgns:	if (param & (1 << 31)) {	    param &= ~(1 << 31);	    goto calcthumbrgn;	}	/* FALLTHROUGH */      case calcCntlRgn:	rgn = (RgnHandle)param;	RectRgn(rgn, &(*control)->contrlRect);	return 0;      case calcThumbRgn:      calcthumbrgn:	rgn = (RgnHandle)param;	SetEmptyRgn(rgn);	return 0;    }    return 0;}#endifstatic void macctrl_radio(struct macctrls *mcs, WindowPtr window,			  struct mac_layoutstate *curstate,			  union control *ctrl){    union macctrl *mc = snew(union macctrl);    Rect bounds;    Str255 title;    unsigned int i, colwidth;    mc->generic.type = MACCTRL_RADIO;    mc->generic.ctrl = ctrl;    mc->generic.privdata = NULL;    mc->radio.tbctrls = snewn(ctrl->radio.nbuttons, ControlRef);    colwidth = (curstate->width + 13) /	ctrl->radio.ncolumns;    bounds.top = curstate->pos.v;    bounds.bottom = bounds.top + 16;    bounds.left = curstate->pos.h;    bounds.right = bounds.left + curstate->width;    if (ctrl->radio.label == NULL)	mc->radio.tblabel = NULL;    else {	if (mac_gestalts.apprvers >= 0x100) {	    mc->radio.tblabel = NewControl(window, &bounds, NULL, FALSE,					   0, 0, 0, kControlStaticTextProc,					   (long)mc);	    SetControlData(mc->radio.tblabel, kControlEntireControl,			   kControlStaticTextTextTag,			   strlen(ctrl->radio.label), ctrl->radio.label);	}#if !TARGET_API_MAC_CARBON	else {	    mc->radio.tblabel = NewControl(window, &bounds, NULL, FALSE,					   0, 0, 0, SYS7_TEXT_PROC, (long)mc);	    TESetText(ctrl->radio.label, strlen(ctrl->radio.label),		      (TEHandle)(*mc->radio.tblabel)->contrlData);	}#endif	curstate->pos.v += 18;    }    for (i = 0; i < ctrl->radio.nbuttons; i++) {	bounds.top = curstate->pos.v - 2;	bounds.bottom = bounds.top + 18;	bounds.left = curstate->pos.h + colwidth * (i % ctrl->radio.ncolumns);	if (i == ctrl->radio.nbuttons - 1 ||	    i % ctrl->radio.ncolumns == ctrl->radio.ncolumns - 1) {	    bounds.right = curstate->pos.h + curstate->width;	    curstate->pos.v += 18;	} else	    bounds.right = bounds.left + colwidth - 13;	c2pstrcpy(title, ctrl->radio.buttons[i]);	mc->radio.tbctrls[i] = NewControl(window, &bounds, title, FALSE,					  0, 0, 1, radioButProc, (long)mc);    }    curstate->pos.v += 4;    add234(mcs->byctrl, mc);    mc->generic.next = mcs->panels[curstate->panelnum];    mcs->panels[curstate->panelnum] = mc;    ctrlevent(mcs, mc, EVENT_REFRESH);}static void macctrl_checkbox(struct macctrls *mcs, WindowPtr window,			     struct mac_layoutstate *curstate,			     union control *ctrl){    union macctrl *mc = snew(union macctrl);    Rect bounds;    Str255 title;    assert(ctrl->checkbox.label != NULL);    mc->generic.type = MACCTRL_CHECKBOX;    mc->generic.ctrl = ctrl;    mc->generic.privdata = NULL;    bounds.left = curstate->pos.h;    bounds.right = bounds.left + curstate->width;    bounds.top = curstate->pos.v;    bounds.bottom = bounds.top + 16;    c2pstrcpy(title, ctrl->checkbox.label);    mc->checkbox.tbctrl = NewControl(window, &bounds, title, FALSE, 0, 0, 1,				     checkBoxProc, (long)mc);    add234(mcs->byctrl, mc);    curstate->pos.v += 22;    mc->generic.next = mcs->panels[curstate->panelnum];    mcs->panels[curstate->panelnum] = mc;    ctrlevent(mcs, mc, EVENT_REFRESH);}static void macctrl_button(struct macctrls *mcs, WindowPtr window,			   struct mac_layoutstate *curstate,			   union control *ctrl){    union macctrl *mc = snew(union macctrl);    Rect bounds;    Str255 title;    assert(ctrl->button.label != NULL);    mc->generic.type = MACCTRL_BUTTON;    mc->generic.ctrl = ctrl;    mc->generic.privdata = NULL;    bounds.left = curstate->pos.h;    bounds.right = bounds.left + curstate->width;    bounds.top = curstate->pos.v;    bounds.bottom = bounds.top + 20;    c2pstrcpy(title, ctrl->button.label);    mc->button.tbctrl = NewControl(window, &bounds, title, FALSE, 0, 0, 1,				   pushButProc, (long)mc);    mc->button.tbring = NULL;    if (mac_gestalts.apprvers >= 0x100) {	Boolean isdefault = ctrl->button.isdefault;	SetControlData(mc->button.tbctrl, kControlEntireControl,		       kControlPushButtonDefaultTag,		       sizeof(isdefault), &isdefault);    } else if (ctrl->button.isdefault) {	InsetRect(&bounds, -4, -4);	mc->button.tbring = NewControl(window, &bounds, title, FALSE, 0, 0, 1,				       SYS7_DEFAULT_PROC, (long)mc);    }    if (mac_gestalts.apprvers >= 0x110) {	Boolean iscancel = ctrl->button.iscancel;	SetControlData(mc->button.tbctrl, kControlEntireControl,		       kControlPushButtonCancelTag,		       sizeof(iscancel), &iscancel);    }    if (ctrl->button.isdefault)	mcs->defbutton = mc;    if (ctrl->button.iscancel)	mcs->canbutton = mc;    add234(mcs->byctrl, mc);    mc->generic.next = mcs->panels[curstate->panelnum];    mcs->panels[curstate->panelnum] = mc;    curstate->pos.v += 26;}#if !TARGET_API_MAC_CARBONstatic pascal SInt32 macctrl_sys7_default_cdef(SInt16 variant,					       ControlRef control,					       ControlDefProcMessage msg,					       SInt32 param){    RgnHandle rgn;    Rect rect;    int oval;    PenState savestate;    switch (msg) {      case drawCntl:	if ((*control)->contrlVis) {	    rect = (*control)->contrlRect;	    GetPenState(&savestate);	    PenNormal();	    PenSize(3, 3);	    if ((*control)->contrlHilite == kControlInactivePart)		PenPat(&qd.gray);	    oval = (rect.bottom - rect.top) / 2 + 2;	    FrameRoundRect(&rect, oval, oval);	    SetPenState(&savestate);	}	return 0;      case calcCRgns:	if (param & (1 << 31)) {	    param &= ~(1 << 31);	    goto calcthumbrgn;	}	/* FALLTHROUGH */      case calcCntlRgn:	rgn = (RgnHandle)param;	RectRgn(rgn, &(*control)->contrlRect);	return 0;      case calcThumbRgn:      calcthumbrgn:	rgn = (RgnHandle)param;	SetEmptyRgn(rgn);	return 0;    }    return 0;}#endifstatic void macctrl_listbox(struct macctrls *mcs, WindowPtr window,			    struct mac_layoutstate *curstate,			    union control *ctrl){    union macctrl *mc = snew(union macctrl);    Rect bounds;    Size olen;    /* XXX Use label */    assert(ctrl->listbox.percentwidth == 100);    mc->generic.type = MACCTRL_LISTBOX;    mc->generic.ctrl = ctrl;    mc->generic.privdata = NULL;    /* The list starts off empty */    mc->listbox.nids = 0;    mc->listbox.ids = NULL;    bounds.left = curstate->pos.h;    bounds.right = bounds.left + curstate->width;    bounds.top = curstate->pos.v;    bounds.bottom = bounds.top + 16 * ctrl->listbox.height + 2;    if (mac_gestalts.apprvers >= 0x100) {	InsetRect(&bounds, 3, 3);	mc->listbox.tbctrl = NewControl(window, &bounds, NULL, FALSE,					ldes_Default, 0, 0,					kControlListBoxProc, (long)mc);	if (GetControlData(mc->listbox.tbctrl, kControlEntireControl,			   kControlListBoxListHandleTag,			   sizeof(mc->listbox.list), &mc->listbox.list,			   &olen) != noErr) {	    DisposeControl(mc->listbox.tbctrl);	    sfree(mc);	    return;	}    }#if !TARGET_API_MAC_CARBON    else {	InsetRect(&bounds, -3, -3);	mc->listbox.tbctrl = NewControl(window, &bounds, NULL, FALSE,					0, 0, 0,					SYS7_LISTBOX_PROC, (long)mc);	mc->listbox.list = (ListHandle)(*mc->listbox.tbctrl)->contrlData;	(*mc->listbox.list)->refCon = (long)mc;    }#endif    if (!ctrl->listbox.multisel) {#if TARGET_API_MAC_CARBON	SetListSelectionFlags(mc->listbox.list, lOnlyOne);#else	(*mc->listbox.list)->selFlags = lOnlyOne;#endif    }    add234(mcs->byctrl, mc);    curstate->pos.v += 6 + 16 * ctrl->listbox.height + 2;    mc->generic.next = mcs->panels[curstate->panelnum];    mcs->panels[curstate->panelnum] = mc;    ctrlevent(mcs, mc, EVENT_REFRESH);#if TARGET_API_MAC_CARBON    HideControl(GetListVerticalScrollBar(mc->listbox.list));#else    HideControl((*mc->listbox.list)->vScroll);#endif}#if !TARGET_API_MAC_CARBONstatic pascal SInt32 macctrl_sys7_listbox_cdef(SInt16 variant,					       ControlRef control,					       ControlDefProcMessage msg,					       SInt32 param){    RgnHandle rgn;    Rect rect;    ListHandle list;    long ssfs;    Point mouse;    ListBounds bounds;    Point csize;    short savefont;    short savesize;    GrafPtr curport;    switch (msg) {      case initCntl:	rect = (*control)->contrlRect;	InsetRect(&rect, 4, 4);	rect.right -= 15; /* scroll bar */	bounds.top = bounds.bottom = bounds.left = 0;	bounds.right = 1;	csize.h = csize.v = 0;	GetPort(&curport);	savefont = curport->txFont;	savesize = curport->txSize;	ssfs = GetScriptVariable(smSystemScript, smScriptSysFondSize);	TextFont(HiWord(ssfs));	TextSize(LoWord(ssfs));	list = LNew(&rect, &bounds, csize, 0, (*control)->contrlOwner,		    TRUE, FALSE, FALSE, TRUE);	SetControlReference((*list)->vScroll, (long)list);	(*control)->contrlData = (Handle)list;	TextFont(savefont);	TextSize(savesize);	return noErr;      case dispCntl:	/*	 * If the dialogue box is being destroyed, the scroll bar	 * might have gone already.  In our situation, this is the	 * only time we destroy a control, so NULL out the scroll bar	 * handle to prevent LDispose trying to free it.	 */	list = (ListHandle)(*control)->contrlData;	(*list)->vScroll = NULL;	LDispose(list);	return 0;      case drawCntl:	if ((*control)->contrlVis) {	    rect = (*control)->contrlRect;	    /* XXX input focus highlighting? */	    InsetRect(&rect, 3, 3);	    PenNormal();	    FrameRect(&rect);	    list = (ListHandle)(*control)->contrlData;	    LActivate((*control)->contrlHilite != kControlInactivePart, list);	    GetPort(&curport);	    LUpdate(curport->visRgn, list);	}	return 0;      case testCntl:	mouse.h = LoWord(param);	mouse.v = HiWord(param);	rect = (*control)->contrlRect;	InsetRect(&rect, 4, 4);	/*	 * We deliberately exclude the scrollbar so that LClick() can see it.	 */	rect.right -= 15;	return PtInRect(mouse, &rect) ? kControlListBoxPart : kControlNoPart;      case calcCRgns:	if (param & (1 << 31)) {	    param &= ~(1 << 31);	    goto calcthumbrgn;	}	/* FALLTHROUGH */      case calcCntlRgn:	rgn = (RgnHandle)param;	RectRgn(rgn, &(*control)->contrlRect);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -