要素に関するイベントを取得する

 

要素に関するイベントを取得する

説明

  • ACAPI_Element_AttachObserverに監視する要素GUIDを渡す
  • 監視されている要素にイベントがあった場合ElementEventHandlerProcが呼び出される
  • ElementEventHandlerProcは事前に(Initializeで)必ず登録しておく
GSErrCode AttachElement()
{
	// 選択している要素を取得する
	API_SelectionInfo	selectionInfo;
	GS::Array<API_Neig> selNeigs;

	GSErrCode err = ACAPI_Selection_Get(&selectionInfo, &selNeigs, true);
	BMKillHandle((GSHandle *)&selectionInfo.marquee.coords);

	if (err != NoError)
		return err;

	// Attachしたオブジェクトのイベントを取得する
	for (API_Neig neig : selNeigs)
	{
		ACAPI_Element_AttachObserver(neig.guid);
	}
}



GSErrCode __ACENV_CALL ElementEventHandlerProc(const API_NotifyElementType *elemType)
{
	GSErrCode err = NoError;

	switch (elemType->notifID)
	{
	case APINotifyElement_BeginEvents:
	case APINotifyElement_New:
	case APINotifyElement_Copy:
		break;

	case APINotifyElement_Change:
	case APINotifyElement_Edit:
	case APINotifyElement_Delete:
		ACAPI_WriteReport("Edtied", true);
		break;

	case APINotifyElement_Undo_Created:
	case APINotifyElement_Undo_Modified:
	case APINotifyElement_Undo_Deleted:
		ACAPI_WriteReport("Undo", true);
		break;

	case APINotifyElement_Redo_Created:
	case APINotifyElement_Redo_Modified:
	case APINotifyElement_Redo_Deleted:
		ACAPI_WriteReport("Redo", true);
		break;

	case APINotifyElement_PropertyValueChange:
	case APINotifyElement_ClassificationChange:
		break;
	case APINotifyElement_EndEvents:
		break;
	default:
		break;
	}
	return err;
}



GSErrCode	__ACENV_CALL Initialize	(void)
{
	GSErrCode err = ACAPI_Install_MenuHandler (ID_MENU_STRINGS, MenuCommandHandler);
	err = ACAPI_Notify_InstallElementObserver(ElementEventHandlerProc);
	return err;
}		// Initialize