Exemplo n.º 1
0
/*	XOPGetDialogItemAsControl(theDialog, itemNumber, controlHPtr)

	Returns via controlHPtr the control handle for the specified dialog item.
	
	This routine displays an error message in Igor's history area if the
	item in question does not have an associated control handle. This would be
	a programming bug that the XOP programmer must correct.
	
	Long ago, the Mac OS provided a set of Dialog Manager calls that you could call
	to manipulate dialog items. Then Apple introduced new capabilities implemented
	by a part of the OS called the Appearance Manager. The method for manipulating
	a dialog item (e.g., setting the text of an EditText field) depends on whether
	you use Appearance Manager features or not. All modern code uses Appearance
	Manager techniques.
	
	To avoid the need to support two ways of doing the same thing, the Carbon XOP
	Toolkit dialog support routines ASSUME that the dialog is Appearance-Manager savvy.
	You make your dialog Appearance savvy by:
	
	1. Including a dlgx resource with the same resource ID as your DLOG resource.
	2. Including the kDialogFlagsUseControlHierarchy bit in the dlgx resource.
	3. Using Appearance Manager programming methods for implementing your dialog.
	
	Including the kDialogFlagsUseControlHierarchy bit in the dlgx resource causes
	the Mac OS to create a control handle for each item in your dialog, if the item
	is not already defined as a CNTL item.
	
	If this routine prints an error message for a valid dialog item number,
	this indicates that you have not made your dialog resources and/or code
	Appearance-Manager savvy.
	
	Thread Safety: XOPGetDialogItemAsControl is not thread-safe.
*/
int
XOPGetDialogItemAsControl(DialogPtr theDialog, int itemNumber, ControlHandle* controlHPtr)
{
	int err;
	
	err = GetDialogItemAsControl(theDialog, itemNumber, controlHPtr);
	if (err==0 && *controlHPtr==NULL)			// Should never happen.
		err = -1;
	if (err) {
		char message[256];
		sprintf(message, "XOP Bug: XOPGetDialogItemAsControl got error %d for item number %d."CR_STR, err, itemNumber);
		XOPNotice(message);
	}
	return err;
}
Exemplo n.º 2
0
/*	XOPMenuItem()

	XOPMenuItem is called when user selects XOPs menu item.
*/
static int
XOPMenuItem(void)
{
	MenuHandle mHandle;
	int resourceMenuID, actualMenuID, menuID;
	int resourceItemNumber, actuaItemNumber, itemNumber;
	int isIgorMenu, isXOPMenu;
	char message[100];
	char buf[256];
	
	isIgorMenu = isXOPMenu = 0;
	
	actualMenuID = (int)GetXOPItem(0);				// Get actual menu ID.
	actuaItemNumber = (int)GetXOPItem(1);
	
	mHandle = GetMenuHandle(actualMenuID);			// This would be NIL if the menu were hidden.
	
	resourceMenuID = ActualToResourceMenuID(actualMenuID);	// convert to resource menu ID.
	if (resourceMenuID != 0) {						// Menu added by XOP ?.
		menuID = resourceMenuID;
		isXOPMenu = 1;
		if (igorVersion >= 200)
			mHandle = ResourceMenuIDToMenuHandle(resourceMenuID);	// NIL if not menu added by XOP.
	}
	else {											// This is an Igor menu.
		menuID = actualMenuID;
		isIgorMenu = 1;
	}
	
	resourceItemNumber = ActualToResourceItem(actualMenuID, actuaItemNumber);
	if (resourceItemNumber != 0)					// Item added by XOP to Igor menu ?.
		itemNumber = resourceItemNumber;
	else											// This is an XOP menu.
		itemNumber = actuaItemNumber;
	
	switch (menuID) {
		case MAINMENU_ID:				// MenuXOP1 menu in main menu bar.
			switch (itemNumber) {
				case 1:
					// This item has a submenu so this item should never be selected.
					strcpy(message, "MenuXOP1: Item1 selected");
					break;
				case 2:
					strcpy(message, "MenuXOP1: Item2 selected");
					break;
				case 3:
					// This item has a submenu so this item will never be selected.
					break;
				default:
					strcpy(message, "MenuXOP1: unknown menu item selected");
					break;
			}
			break;
			
		case SUBMENU1_ID:				// Submenu in item 1 of main menu bar.
			switch (itemNumber) {
				case 1:
					strcpy(message, "MenuXOP1: Subitem1_1 selected");
					break;
				case 2:
					strcpy(message, "MenuXOP1: Subitem1_2 selected");
					break;
				case 3:
					strcpy(message, "MenuXOP1: Subitem1_3 selected");
					break;
				default:
					strcpy(message, "MenuXOP1: unknown menu item selected");
					break;
			}
			break;
			
		case SUBMENU2_ID:				// Submenu in item 3 of main menu bar.
			switch (itemNumber) {
				case 1:
					strcpy(message, "MenuXOP1: Subitem3_1 selected");
					break;
				case 2:
					// This item has a submenu so this item will never be selected.
					break;
				case 3:
					strcpy(message, "MenuXOP1: Subitem3_3 selected");
					break;
				default:
					strcpy(message, "MenuXOP1: unknown menu item selected");
					break;
			}
			break;
			
		case SUBMENU3_ID:				// Sub-submenu in item 2 of 2nd submenu.
			switch (itemNumber) {
				case 1:
					strcpy(message, "MenuXOP1: Subitem3_2_1 selected");
					break;
				case 2:
					strcpy(message, "MenuXOP1: Subitem3_2_2 selected");
					break;
				case 3:
					strcpy(message, "MenuXOP1: Subitem3_2_3 selected");
					break;
				default:
					strcpy(message, "MenuXOP1: unknown menu item selected");
					break;
			}
			break;
			
		case SUBMENU4_ID:				// Submenu in item added to Analysis menu.
			switch (itemNumber) {
				case 1:
					strcpy(message, "MenuXOP1: Analysis Item1 selected");
					break;
				case 2:
					strcpy(message, "MenuXOP1: Analysis Item2 selected");
					break;
				case 3:
					strcpy(message, "MenuXOP1: Analysis Item3 selected");
					break;
				default:
					strcpy(message, "MenuXOP1: unknown menu item selected");
					break;
			}
			break;
			
		case MISCID:		// MISCID = 8 (see IgorXOP.h).
			switch (itemNumber) {
				case 1:
					strcpy(message, "MenuXOP1: Misc1 selected");
					break;
				
				case 2:
					strcpy(message, "MenuXOP1: Misc2 selected");
					break;
			}
			break;
			
		default:
			strcpy(message, "MenuXOP1: unknown menu item selected");
			break;
	}
	
	sprintf(buf, "%s"CR_STR, message);
	XOPNotice(buf);
	
	if (isIgorMenu) {
		sprintf(buf, "mHandle=%p, actualMenuID=%d, resourceItemNumber=%d, actuaItemNumber=%d"CR_STR,
					  mHandle, actualMenuID, resourceItemNumber, actuaItemNumber);
		XOPNotice(buf);
	}
	if (isXOPMenu) {
		sprintf(buf, "mHandle=%p, resourceMenuID=%d, actualMenuID=%d, actuaItemNumber=%d"CR_STR,
					  mHandle, resourceMenuID, actualMenuID, actuaItemNumber);
		XOPNotice(buf);
	}
	
	return(0);
}