Esempio n. 1
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CRegOperatPropAct::BeginAction (IProgressIndicator* pIProgInd)
{
#if _TRiAS_VER < 0x0300
	m_hPr = 0;
#else
	COM_TRY
	{
	// Zieldatenquelle aus KontextObjekt herausfinden
	WPropertyActionSequence wSeq;
	WDataObject CtxDO;
	CComVariant vData;

		m_hPr = 0;

		THROW_FAILED_HRESULT (GetSite (IID_IPropertyActionSequence, wSeq.ppv()));
		THROW_FAILED_HRESULT (wSeq->GetSequenceContext (CtxDO.ppi()));
		if (SUCCEEDED (GetVariantData (CtxDO, &c_feDataSourceHandle, &vData)) &&
			SUCCEEDED (vData.ChangeType (VT_I4))) 
		{
			m_hPr = reinterpret_cast<HPROJECT>(V_I4(&vData));
		}
	}
	COM_CATCH;
#endif // _TRiAS_VER < 0x0300

	// Zustand des Dialogs retten (für evtl. späteres Save())
	m_pRegOperDlg->GetSelectedInfo (&m_caSelInfo, m_bIsDirty);

	// Liste für Objekte, die an die PropertyPage übergeben werden, initialisieren
	m_InObjs.clear();				// Liste sicher leeren
	m_ObjsIter = m_InObjs.begin();	// auf Anfang stellen

	return S_OK;

} // BeginAction
Esempio n. 2
0
// ----------------------------------------------------------------------------
// PropertySequence_refcnt
// ----------------------------------------------------------------------------
void PropertySequence_refcnt (ebHTHREAD hThread, int iNumArgs, ebARGS lpArgs)
{
	BASIC_OP_TRACE_SYS(PropertySequence_refcnt);
	switch (iNumArgs) {
	case OBJECT_REFNEW:
		{
			ebSetObject (lpArgs, 0, NULL);		// für alle Fälle
			try {
			WPropertyActionSequence PropSeq (CLSID_PropertyActionSequence);		// throws hr
			HPROJECT hPrCtx = reinterpret_cast<HPROJECT>(ebThread_GetLong (hThread, SETLONG_HPROJECT));		// Kontext-Datenquelle

				ebSetObject (lpArgs, 0, (DWORD)PropSeq.detach());
				if (HACTCONNECTION != hPrCtx) {
				WDataObject CtxDO;
				CComVariant vData (reinterpret_cast<long>(hPrCtx), VT_I4);

					THROW_FAILED_HRESULT(PropSeq -> GetSequenceContext (CtxDO.ppi()));
					THROW_FAILED_HRESULT(SetVariantData (vData, CtxDO, &c_feDataSourceHandle));
				}

			} catch (...) {
				TRACE("Couldn't instantiate PropertyActionSequence\r\n");
			}
		}
		break;
		
	case OBJECT_REFINC:
		((IUnknown *)ebGetObject(lpArgs, 1)) -> AddRef();
		break;
		
	case OBJECT_REFDEC:
		((IUnknown *)ebGetObject(lpArgs, 1)) -> Release();
		break;
	}
}
Esempio n. 3
0
// ----------------------------------------------------------------------------
// PropertySequence_cmd_RedoActions
// ----------------------------------------------------------------------------
void PropertySequence_cmd_RedoActions (ebHTHREAD hThread, int iNumArgs, ebARGS lpArgs)
{
	BASIC_OP_TRACE(PropertySequence_cmd_RedoActions);

WPropertyActionSequence Seq ((IPropertyActionSequence *)ebGetObject (lpArgs, 1));
WDataObject InData;
_DGeoObjects *pIObjs = iNumArgs > 1 ? (_DGeoObjects *)ebGetObject (lpArgs, 2) : NULL;
HRESULT hr = NOERROR;

	if (NULL != pIObjs) {
	WEnumLONG EnumObjs;

		hr = GetEnumLongFromGeoObjects (pIObjs, EnumObjs.ppi());
		if (SUCCEEDED(hr)) {
			hr = CoCreateInstance (CLSID_DataTransferObject, NULL, CLSCTX_INPROC_SERVER, 
								   IID_IDataObject, InData.ppv());
			if (SUCCEEDED(hr))
				hr = SetEnumLONGData (EnumObjs, InData);
			else
				InData.Assign (NULL);		// freigeben
		}
		pIObjs = NULL;		// wird nicht mehr benötigt
	}

	Seq -> RedoActions (__hWndM, NULL, InData, NULL);
}
Esempio n. 4
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CRegOperatPropAct::EndAction (DWORD, IDataObject** ppDataOut)
{
	_ASSERTE (m_ObjsIter != m_InObjs.end());

	*ppDataOut = 0;
	try {
	WEnumLONG wEnumInObj (*m_ObjsIter);	// die zu bearbeitenden Objekte
	WEnumLONG wEnumOutObj;				// Ergebnisobjekte der ausgewählten Operation

	// Optionen abfragen
	DWORD dwOptions = 0x00;

		if (SUCCEEDED(EnsureOptionsIF())) {
			_ASSERTE(m_wOperOptions.IsValid());
			m_wOperOptions->GetOptions (&dwOptions);
		}

		// im Dialog ausgewählte Operation ausführen
		THROW_FAILED_HRESULT (m_pRegOperDlg->ExecuteOperation (m_hPr, wEnumInObj, dwOptions,
															   wEnumOutObj.ppi()));
		m_ObjsIter++;

		if (wEnumOutObj.IsValid())
		{
		// IDataObject abfragen
		WDataObject IDO (CLSID_DataTransferObject);

		// Ergebnisobjekte im DataObjekt IDO speichern
			THROW_FAILED_HRESULT (SetEnumLONGData (
				(IEnum<LONG>*)(IEnumLONG*)wEnumOutObj, IDO));

		// Resultat setzen
			*ppDataOut = IDO.detach();
			if (0 == wEnumOutObj->Count()) {
			ResString resTitel (ResID (IDS_LONGCLASSNAME, pRF), 50);
			ResString resText (ResID (IDS_BOXTEXT1, pRF), 200);
	
				MessageBox (__hWndM, resText.Addr(), resTitel.Addr(),
							MB_ICONINFORMATION | MB_OK);
			}
		}
	}
	catch (_com_error& hr_result)		// 23.09.99
	{
		DELETE_OBJ (m_pRegOperDlg);		// bei Fehler Dialog wieder freigeben
		return _COM_ERROR(hr_result);	// 23.09.99
	}

	if (m_ObjsIter != m_InObjs.end())	// es kommen noch weitere Daten
		return S_FALSE;

	DELETE_OBJ (m_pRegOperDlg);			// es kommen keine Daten mehr
	return S_OK;

} // EndAction
Esempio n. 5
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CAreaBuildPropAct::EndAction (DWORD, IDataObject** ppDataOut)
{
	_ASSERTE (m_ObjsIter != m_InObjs.end());

	*ppDataOut = 0;

	COM_TRY {
	WEnumLONG wEnumInObj (*m_ObjsIter);	// die zu bearbeitenden Objekte
	WEnumLONG wEnumOutObj;				// Ergebnisobjekte der ausgewählten Operation

	// Optionen abfragen
	DWORD dwOptions = 0x00;

		if (m_wOperOptions.IsValid())
			m_wOperOptions->GetOptions (&dwOptions);

		// im Dialog ausgewählte Operation ausführen
		THROW_FAILED_HRESULT (m_pAreaBuildDlg->ExecuteOperation (m_hPr, wEnumInObj, dwOptions,
																 wEnumOutObj.ppi()));

		m_ObjsIter++;

		if (wEnumOutObj.IsValid()) {
		// IDataObject abfragen
		WDataObject IDO (CLSID_DataTransferObject);

		// Ergebnisobjekte im DataObjekt IDO speichern
			THROW_FAILED_HRESULT (SetEnumLONGData ((IEnum<LONG>*)(IEnumLONG*)wEnumOutObj,
												   IDO));
		// Resultat setzen
			*ppDataOut = IDO.detach();

			if (0 == wEnumOutObj->Count()) {
			ResString resTitel (ResID (IDS_LONGCLASSNAME, pRF), 50);
			ResString resText (ResID (IDS_BOXTEXT7, pRF), 200);
	
				MessageBox (__hWndM, resText.Addr(), resTitel.Addr(),
							MB_ICONINFORMATION | MB_OK);
			}
		}
	}
	COM_CATCH_OP(
		delete m_pAreaBuildDlg;	// bei Fehler Dialog wieder freigeben
    );
Esempio n. 6
0
STDMETHODIMP CTextSearchEngine::EndAction (DWORD, IDataObject **ppDataObj)
{
	if (NULL == m_pCfgDlg) return E_UNEXPECTED;
	if (NULL == ppDataObj) return E_POINTER;

	*ppDataObj = NULL;
	COM_TRY {
	// DataObject generieren und mit EnumObj füllen
	WEnumLONG EnumObj;
	
		THROW_FAILED_HRESULT(m_pCfgDlg -> GetEnumLONG (EnumObj.ppi()));

	WDataObject IDO (CLSID_DataTransferObject);
	
		THROW_FAILED_HRESULT(SetEnumLONGData (EnumObj, IDO));
		*ppDataObj = IDO.detach();

	} COM_CATCH_OP((delete m_pCfgDlg, m_pCfgDlg = NULL));

// rechercvhe liefert immer nur eine Objektmenge
	DELETE_OBJ(m_pCfgDlg);		// Dialog wird nicht mehr gebraucht
	return S_OK;
}