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

📄 megab.c

📁 安装DDD之前
💻 C
📖 第 1 页 / 共 3 页
字号:
	}	first = FPOS(_mbw);	mwp = 0;	maxHeight = 1;	maxWidth = 1;	for(i=0; (first + i) < ICOUNT(_mbw); i++)	{		LABEL(_mbw)._label = ITEMS(_mbw)[first+i];		_XmCalcLabelDimensions((Widget)_mbw);		if (LABEL(_mbw).TextRect.width > maxWidth)		{			maxWidth = LABEL(_mbw).TextRect.width;			mwp = i;		}		if (LABEL(_mbw).TextRect.height > maxHeight)			maxHeight = LABEL(_mbw).TextRect.height;	}	*_maxWidthPos = mwp;	*_height = maxHeight;}		static void drawShadowedItem(Widget _mbw, int _pos, Boolean _clear){	Position y;		if ( (_pos < 0) || (HAS_ARROWS(_mbw) && (_pos > (VIS_COUNT(_mbw)+1))) ||		(!HAS_ARROWS(_mbw) && (_pos >= VIS_COUNT(_mbw)))		)		return;	y = 0;	if (HAS_ARROWS(_mbw))	{		if (_pos > 0)			y += MINI_SEP_HEIGHT;		if (_pos > VIS_COUNT(_mbw) )			y += MINI_SEP_HEIGHT;	}	y += (_pos * EL_HEIGHT(_mbw));	if (_clear)	{		_XmClearBorder(XtDisplay((Widget)_mbw), XtWindow((Widget)_mbw),				0, y, WIDTH(_mbw), EL_HEIGHT(_mbw),				PRIM(_mbw).shadow_thickness);	}	else	{		_XmDrawShadows(XtDisplay((Widget)_mbw), XtWindow((Widget)_mbw),				PRIM(_mbw).top_shadow_GC,				PRIM(_mbw).bottom_shadow_GC,				0, y, WIDTH(_mbw), EL_HEIGHT(_mbw),				PRIM(_mbw).shadow_thickness,				XmSHADOW_OUT);	}}static void clearArrow(Widget _mbw, int _pos){	Position y = 0;	if (HAS_ARROWS(_mbw))	{		if (_pos > 0)			y += MINI_SEP_HEIGHT;		if (_pos > VIS_COUNT(_mbw) )			y += MINI_SEP_HEIGHT;	}	y += (_pos * EL_HEIGHT(_mbw));	XClearArea(XtDisplay(_mbw), XtWindow(_mbw), 		PRIM(_mbw).shadow_thickness, y + PRIM(_mbw).shadow_thickness,		WIDTH(_mbw) - 2 * PRIM(_mbw).shadow_thickness,		EL_HEIGHT(_mbw) - 2 * PRIM(_mbw).shadow_thickness, FALSE);}static int yToPos(Widget _mbw, Position _y){	Dimension topOffset, bottomOffset;	if ((_y >= 0) && HAS_ARROWS(_mbw))	{		if ((Dimension)_y <= EL_HEIGHT(_mbw))			return 0;		topOffset = EL_HEIGHT(_mbw) + MINI_SEP_HEIGHT;		if ((Dimension)_y <= topOffset)			return 0;		bottomOffset = HEIGHT(_mbw) - EL_HEIGHT(_mbw);		if ((Dimension)_y >= bottomOffset)			return VIS_COUNT(_mbw)+1;		bottomOffset -= MINI_SEP_HEIGHT;		if ((Dimension)_y >= bottomOffset)			return VIS_COUNT(_mbw);		_y -= MINI_SEP_HEIGHT;	}	return _y/EL_HEIGHT(_mbw);}static void enterWidget(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	if (ICOUNT(_mbw) == 0)		return;	XtCallActionProc((Widget)_mbw, "PrimitiveEnter", _event, _params, *_numParams);	if ( LABEL(_mbw).menu_type != XmWORK_AREA ) 	{		if (_XmGetInDragMode((Widget)_mbw))		{			drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);			VIS_POS(_mbw) = yToPos(_mbw, _event->xbutton.y);			drawShadowedItem(_mbw, VIS_POS(_mbw), FALSE);			if (HAS_ARROWS(_mbw))			{				if (VIS_POS(_mbw) == VIS_COUNT(_mbw)+1)				{					TDIR(_mbw) = XmTRAVERSE_DOWN;					TIMER(_mbw) = XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)_mbw),						(unsigned long)IDELAY(_mbw),						timedScroll, (XtPointer)_mbw);				}				else				if (VIS_POS(_mbw) == 0)				{					TDIR(_mbw) = XmTRAVERSE_UP;					TIMER(_mbw) = XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)_mbw),						(unsigned long)IDELAY(_mbw),						timedScroll, (XtPointer)_mbw);				}			}		}	} } static void leaveWidget(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	if (ICOUNT(_mbw) == 0)		return;	XtCallActionProc((Widget)_mbw, "PrimitiveLeave", _event, _params, *_numParams);	if ( LABEL(_mbw).menu_type != XmWORK_AREA ) 	{/* 		if ( _XmGetInDragMode((Widget)_mbw) )  */		/* drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE); */		if (TIMER(_mbw) != -1)		{			XtRemoveTimeOut(TIMER(_mbw));			TIMER(_mbw) = -1;		}	} 	drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);} static void buttonMotion(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	if (ICOUNT(_mbw) == 0)		return;	if ( LABEL(_mbw).menu_type != XmWORK_AREA )	{		int pos = yToPos(_mbw, _event->xmotion.y);		if (pos != VIS_POS(_mbw))		{			if (TIMER(_mbw) != -1)			{				XtRemoveTimeOut(TIMER(_mbw));				TIMER(_mbw) = -1;			}			drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);			drawShadowedItem(_mbw, pos, FALSE);			VIS_POS(_mbw) = pos;			if (HAS_ARROWS(_mbw))			{				if (VIS_POS(_mbw) == VIS_COUNT(_mbw)+1)					scroll(_mbw, XmTRAVERSE_DOWN, TRUE, IDELAY(_mbw));				else				if (VIS_POS(_mbw) == 0)					scroll(_mbw, XmTRAVERSE_UP, TRUE, IDELAY(_mbw));			}			_XmSetInDragMode((Widget)_mbw, TRUE);		}	}} static void up(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	int vpos;	if (ICOUNT(_mbw) == 0)		return;	if (LABEL(_mbw).menu_type != XmWORK_AREA )	{		if (!_XmGetInDragMode((Widget)_mbw))		{			vpos = VIS_POS(_mbw);			vpos--;			if ((vpos == -1) && (FPOS(_mbw) == 0))			{				CompositeWidget parent = (CompositeWidget)XtParent(_mbw);				if (parent->composite.num_children > 1)				{					XtCallActionProc((Widget)_mbw, "PrimitiveTraverseUp", _event, _params, *_numParams);					return;				}			}			if (HAS_ARROWS(_mbw) && (vpos <= 0))			{				if (vpos == 0)				{					drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);					drawShadowedItem(_mbw, vpos, FALSE);				}				scroll(_mbw, XmTRAVERSE_UP, FALSE, 0);				VIS_POS(_mbw) = 0;			}			else			{				if (!HAS_ARROWS(_mbw) && (vpos == -1))					vpos = ICOUNT(_mbw)-1;				if (vpos != VIS_POS(_mbw))				{					drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);					drawShadowedItem(_mbw, vpos, FALSE);					VIS_POS(_mbw) = vpos;				}			}			_XmRecordEvent(_event);		}	}}static void down(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	int vpos;	if (ICOUNT(_mbw) == 0)		return;	if (LABEL(_mbw).menu_type != XmWORK_AREA )	{		if (!_XmGetInDragMode((Widget)_mbw))		{			vpos = VIS_POS(_mbw);			vpos++;			_XmRecordEvent(_event);			if (HAS_ARROWS(_mbw) && (vpos >= (VIS_COUNT(_mbw) + 1)))			{				if (VIS_POS(_mbw) != (VIS_COUNT(_mbw)+1))				{					drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);					drawShadowedItem(_mbw, vpos, FALSE);				}				else				if (FPOS(_mbw) >= (ICOUNT(_mbw)-VIS_COUNT(_mbw)))				{					CompositeWidget parent = (CompositeWidget)XtParent(_mbw);					if (parent->composite.num_children > 1)					{						XtCallActionProc((Widget)_mbw, "PrimitiveTraverseDown", _event, _params, *_numParams);						return;					}				}				scroll(_mbw, XmTRAVERSE_DOWN, FALSE, 0);				VIS_POS(_mbw) = VIS_COUNT(_mbw) + 1;			}			else			{				if (!HAS_ARROWS(_mbw))				{					if (vpos == ICOUNT(_mbw))					{						CompositeWidget parent = (CompositeWidget)XtParent(_mbw);						if (parent->composite.num_children > 1)						{							XtCallActionProc((Widget)_mbw, "PrimitiveTraverseDown", _event, _params, *_numParams);							return;						}						else							vpos = 0;					}				}				drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);				drawShadowedItem(_mbw, vpos, FALSE);				VIS_POS(_mbw) = vpos;			}		}	}}static void buttonUp(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	XmMegaButtonCallbackStruct mtbcs;	Widget parent, shell;	Boolean validButton;	Boolean poppedUp;	Boolean isMenuPane;	if (TIMER(_mbw) != -1)	{		XtRemoveTimeOut(TIMER(_mbw));		TIMER(_mbw) = -1;	}	if (ICOUNT(_mbw) == 0)		return;	isMenuPane = (LABEL(_mbw).menu_type == XmMENU_PULLDOWN) || (LABEL(_mbw).menu_type == XmMENU_POPUP);	shell = XtGetShell((Widget)_mbw);	parent = XtParent(_mbw);	if (_event && (_event->type == ButtonRelease))	{		(* xmLabelClassRec.label_class.menuProcs) (XmMENU_BUTTON, parent, NULL, _event, &validButton);		if (!validButton)			return;		VIS_POS(_mbw) = yToPos(_mbw, _event->xbutton.y);	}	if (HAS_ARROWS(_mbw) && !_XmGetInDragMode((Widget)_mbw))	{		if (VIS_POS(_mbw) == 0)		{			_XmRecordEvent(_event);			return;		}		else		if (VIS_POS(_mbw) == (VIS_COUNT(_mbw)+1))		{			_XmRecordEvent(_event);			return;		}	}	if (isMenuPane && !XmIsMenuShell(shell))		(* xmLabelClassRec.label_class.menuProcs) (XmMENU_POPDOWN, (Widget) _mbw, NULL, _event, &poppedUp);	else		(* xmLabelClassRec.label_class.menuProcs) (XmMENU_BUTTON_POPDOWN, (Widget) _mbw , NULL, 			_event, &poppedUp);	_XmRecordEvent(_event);	if (poppedUp)		return;	mtbcs.reason = XmCR_ACTIVATE;	mtbcs.event = _event;	if (HAS_ARROWS(_mbw))	{		if ((VIS_POS(_mbw) == 0) || (VIS_POS(_mbw) == (VIS_COUNT(_mbw)+1)))			return;		mtbcs.pos = FPOS(_mbw) + VIS_POS(_mbw) - 1;			}	else		mtbcs.pos = VIS_POS(_mbw);	mtbcs.callbackValue = DATA(_mbw)[mtbcs.pos];	mtbcs.string = _XmStringCreateExternal(LABEL(_mbw).font, ITEMS(_mbw)[mtbcs.pos]);	SET_POS(_mbw) = mtbcs.pos;#if 0	if (XmIsRowColumn(parent))		(* xmLabelClassRec.label_class.menuProcs) (XmMENU_CALLBACK, parent, FALSE, _mbw, (XtPointer)&mtbcs);	else#endif		XtCallCallbackList((Widget)_mbw, PUSH(_mbw).activate_callback, &mtbcs);	_XmSetInDragMode((Widget)_mbw, False);}static void buttonDown(Widget _mbw, XEvent *_event, String *_params, 		Cardinal *_numParms){	ShellWidget popupShell;	int validButton, pos = 0;	Widget child;	if (ICOUNT(_mbw) == 0)		return;	XAllowEvents(XtDisplay(_mbw), SyncPointer, CurrentTime);	if (_event && (_event->type == ButtonPress))	{		(* xmLabelClassRec.label_class.menuProcs) (XmMENU_BUTTON, XtParent(_mbw), NULL, _event, &validButton);		if (!validButton)			return;		pos = yToPos(_mbw, _event->xbutton.y);	}	if (HAS_ARROWS(_mbw) && !_XmGetInDragMode((Widget)_mbw))	{		if (pos == 0)		{			drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);			VIS_POS(_mbw) = pos;			drawShadowedItem(_mbw, VIS_POS(_mbw), FALSE);			_XmRecordEvent(_event);			scroll(_mbw, XmTRAVERSE_UP, TRUE, IDELAY(_mbw));			return;		}		else		if (pos == (VIS_COUNT(_mbw)+1))		{			drawShadowedItem(_mbw, VIS_POS(_mbw), TRUE);			VIS_POS(_mbw) = pos;			drawShadowedItem(_mbw, VIS_POS(_mbw), FALSE);			_XmRecordEvent(_event);			scroll(_mbw, XmTRAVERSE_DOWN, TRUE, IDELAY(_mbw));			return;		}	}	VIS_POS(_mbw) = pos;	_XmSetInDragMode((Widget)_mbw, TRUE);	popupShell = (ShellWidget)_XmGetRC_PopupPosted(XtParent(_mbw));	if  (popupShell)	{		if (popupShell->shell.popped_up)			(* xmLabelClassRec.label_class.menuProcs)(XmMENU_SHELL_POPDOWN, (Widget)popupShell, NULL, _event, NULL);		child = ((XmManagerWidget)XtParent(_mbw))->manager.active_child;		if (child && (XmIsCascadeButton(child) || XmIsCascadeButtonGadget(child)))			XmCascadeButtonHighlight (child, FALSE);	}	XmProcessTraversal( (Widget)_mbw, XmTRAVERSE_CURRENT);	_XmSetInDragMode((Widget)_mbw, FALSE);	_XmRecordEvent(_event);}static void armAndActivate(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	XmMegaButtonCallbackStruct mtbcs;	if (ICOUNT(_mbw) == 0)		return;	mtbcs.reason = XmCR_ACTIVATE;	mtbcs.event = _event;	if (HAS_ARROWS(_mbw))	{		if ((VIS_POS(_mbw) == 0) || (VIS_POS(_mbw) == (VIS_COUNT(_mbw)+1)))			return;		mtbcs.pos = FPOS(_mbw) + VIS_POS(_mbw) - 1;	}	else		mtbcs.pos = VIS_POS(_mbw);	mtbcs.callbackValue = DATA(_mbw)[mtbcs.pos];	mtbcs.string = _XmStringCreateExternal(LABEL(_mbw).font, ITEMS(_mbw)[mtbcs.pos]);	SET_POS(_mbw) = mtbcs.pos;	XFlush(XtDisplay(_mbw));	XtCallCallbackList((Widget)_mbw, PUSH(_mbw).activate_callback, &mtbcs);}static Widget XtGetShell(Widget _w){	Widget temp;	temp = _w;	while(temp && !XtIsSubclass(temp, shellWidgetClass))		temp = XtParent(temp);	return temp;}#if !HAVE_SOURCE && !defined(LESSTIF_VERSION)struct _XmFocusDataRec{	Widget not_used;	Widget not_used_2;	Widget old_focus_item;};#endif /* HAVE_SOURCE *//*** This is a tad hackish.  The general idea is that there is no way to tell which** directory the focusIn event came from if we are in a menu.  So get the** focusData which has the last widget to have focus.  Use this as an index** into the RowCol's children, and go from there.*/static void focusIn(Widget _mbw, XEvent *_event, String *_params, Cardinal *_numParams){	int labelCount;	Widget oldFocus;	CompositeWidget parent;	XmFocusData focusData;	WidgetList children;	int myI, oldI, i;	VIS_POS(_mbw) = 0;	if (ICOUNT(_mbw) == 0)		return;	focusData = _XmGetFocusData((Widget)_mbw);	if (focusData && focusData->old_focus_item)	{		oldFocus = focusData->old_focus_item;		parent = (CompositeWidget)XtParent(_mbw);		children = parent->composite.children;		myI = -1;		oldI = -1;		labelCount = 0;		for(i=0;(i<parent->composite.num_children);i++)		{			if (children[i] == (Widget)_mbw)				myI = i;			else			if (children[i] == oldFocus)				oldI = i;

⌨️ 快捷键说明

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