Example #1
0
// alle zum Erzeuger gehörenden Abfälle locken
int CAbfSet::LockReckord (BOOL bLock, CWnd *pWnd, const char *pNummer)
{
	int iRes = LockFailed;						// noch nichts getan
	COleVariant varOldPos;
	try 
	{
		CMutex mt;
		if (!m_bCanUpDate)					// war durch anderen Nutzer
			return NothingToLock;			// gesperrt

		if (m_RecordInfoList.IsEmpty ())
			return Locked;
		
		ASSERT (IsOpen ());

		CWaitCursor wc;	
	//	ak. Satz immer zuerst behandeln
		iRes = CDaoRecordsetExt :: LockReckord (bLock, pWnd, pNummer);
		if ((LockFailed == iRes) ||					// wenn Fehler beim Locken oder
			(bLock && (NothingToLock == iRes)))		// durch anderen Nutzer gesperrt
			return iRes;

		varOldPos = GetBookmark ();		// alte Pos. speichern
		CRecordInfo *pInfo = NULL;

	//	jetzt durch alle Sätze bewegen
		POSITION pos = m_RecordInfoList.GetHeadPosition ();
		while (NULL != pos)
		{
			pInfo = m_RecordInfoList.GetNext (pos);
			ASSERT (NULL != pInfo);
			if (pInfo -> m_varBookMark == varOldPos)	// diesen Satz nicht noch mal
				continue;

			SetBookmark (pInfo -> m_varBookMark);		// akt. Satz setzen
			iRes = CDaoRecordsetExt :: LockReckord (bLock, NULL, pNummer);
			if ((LockFailed == iRes) ||				// wenn Fehler beim Locken oder
				(bLock && (NothingToLock == iRes)))	// durch anderen Nutzer gesperrt
			break;
		}		
	}
	catch (CDaoException *e)
	{
		:: DisplayDaoException (e);
		e -> Delete ();
	}
	catch (CException *e)
	{
		e -> ReportError ();
		e -> Delete ();
	}
	if (varOldPos.vt != VT_EMPTY)
		SetBookmark (varOldPos);		// wieder auf alte Position
	 
	return iRes;	
}
Example #2
0
int PoeditListCtrl::OnGetItemImage(long item) const
{
    if (!m_catalog)
        return IMG_NOTHING;

    auto d = ListIndexToCatalogItem((int)item);

    if (d->GetBookmark() != NO_BOOKMARK)
        return IMG_BOOKMARK;
    else if (d->HasComment() || d->HasExtractedComments())
        return IMG_COMMENT;
    else if (d->IsAutomatic())
        return IMG_AUTOMATIC;
    else
        return IMG_NOTHING;
}
Example #3
0
 /// Returns true if the item has a bookmark
 bool HasBookmark() const {return (GetBookmark() != NO_BOOKMARK);}
Example #4
0
BOOL CAbfSet::SearchNummer (const char *pNummer, BOOL bOutErrMsg /*=TRUE*/)
{
	// wenn der Erzset noch leer ist ist alles getan
	if (NULL == g_pErzSet)
		return TRUE;

//  JG den default Parameter handeln
	if (NULL == pNummer)
		pNummer = (g_pErzSet->m_Nummer);

	ASSERT (pNummer != NULL && AfxIsValidString (pNummer));
	BOOL bOk = FALSE;		// noch nichts getan

	try
	{

	//	Satz bereits geladen ?
//	das will ich ja gerade provozieren
//		if (!*pNummer || (m_Nummer == pNummer))
//			return TRUE;

		CMutex mt;
		CWaitCursor wc;
		COutputLockError le (this);

	//	akt. Satz entriegeln und speichern
		if (!LockReckord (FALSE))
			return FALSE;

	//	akt. Pos. merken
		COleVariant BookMark = GetBookmark ();

		bOutErrMsg = false;

	//	neue Nummer suchen
		if (MoveExt ("=", AFX_DAO_NEXT, pNummer))
		{
			bOk = TRUE;
		}
		else
		{
			if (bOutErrMsg)
			{
				CGakApp *pApp = (CGakApp *) AfxGetApp ();
				ASSERT (pApp != NULL);
				CString strInfo;
				AfxFormatString1 (strInfo, IDS_ABF_NOT_FOUND, pNummer);
				pApp -> OutputMessage (strInfo);	// Nachricht an Nutzer ausgeben
			}
			SetBookmark (BookMark);					// alten Satz einstell.
		}

	//	akt. Satz sperren 
		return LockReckord();
	}
	catch (CException *e)
	{
		// e -> ReportError ();		// bereits ausgegeben 
		e -> Delete ();
	}

	return bOk;
}
Example #5
0
//	überlagerte MoveNext-Funktion
//	die Funktion geht davon aus, daß der Index "Nummer" gesetzt ist
BOOL CAbfSet::MoveExt (const char *pS, int iDir, const char *pErzNr /* = NULL */)
{
	ASSERT_VALID (this);
	ASSERT (IsOpen ());
	ASSERT (NULL != pS && AfxIsValidString (pS));
	ASSERT ((0 == strcmp (pS, ">")) || (0 == strcmp (pS, "<")) || (0 == strcmp (pS, "=")));
	ASSERT ((AFX_DAO_NEXT == iDir) || (AFX_DAO_PREV == iDir) ||
			(AFX_DAO_FIRST == iDir) || (AFX_DAO_LAST == iDir));

	COleVariant varOldErz;			// alter Erzeuger	
	BOOL bResOp = FALSE;			// noch nichts getan
	
	try
	{
		CMutex mt;					 // dieses Codestück thread sicher machen
		CWaitCursor wc;
		varOldErz = GetBookmark ();	 // Marke von altem Erzeuger

	//	zur nächsten Abfallgruppe	
		BOOL bFirstOp = FALSE;
		switch (iDir)
		{
			case AFX_DAO_NEXT:			
			case AFX_DAO_PREV:
			{
				// JG einfach den synchronen DS finden
				if (NULL == pErzNr && NULL != g_pErzSet)
					pErzNr = (g_pErzSet->m_Nummer);

				ASSERT ((NULL != pErzNr && *pErzNr) || !m_Nummer.IsEmpty ());
#pragma MSG("JG Clean up this")
// Das wäre die Version mit Abfrage
/*				// m_strFilter strFilter;
				m_strFilter = "[Nummer] = """;
				m_strFilter += 
				pErzNr && *pErzNr ? pErzNr : m_Nummer;
				m_strFilter += """";
				Requery();
*/
				COleVariant VarNr (pErzNr && *pErzNr ? pErzNr : m_Nummer, VT_BSTRT);
				bFirstOp = Seek (pS, &VarNr);
			}
			break;
			case AFX_DAO_FIRST:
			case AFX_DAO_LAST:
			{
				CDaoRecordset :: Move (iDir);
				if (AFX_DAO_FIRST == iDir)
					iDir = AFX_DAO_NEXT;
				else
					iDir = AFX_DAO_PREV;
				bFirstOp = TRUE;
			}
			break;
			default:
				ASSERT (FALSE);
		}

	//	1. Satz gefunden ?
		if (bFirstOp)			
		{
		//	Buchmarken sammeln	
			CRecordInfoList NewList;			// neue Liste anlegen
			CRecordInfo *pInfo = NULL;			// Zeiger int.
			CString strNummer (m_Nummer);
			do
			{
			//	Infos speichern
				CRecordInfo *pInfo = new CRecordInfo (m_Abfallnummer, GetBookmark ());
				NewList.AddTail (pInfo);					
				try
				{
					CDaoRecordset :: Move (iDir);
				}
				catch (CDaoException *e)
				{
					:: DisplayDaoException (e);
					e -> Delete ();
					break;
				}
				catch (CException *e)
				{
					e -> Delete ();
					break;
				}
			}					
			while ((m_Nummer == strNummer) && !IsEOF () && !IsBOF ());					

		//	ggf. Lockmeldung ausgeben
			OutputLockErrorMessage ();

		//	jetzt auf 1. Erzeuger gehen
			POSITION pos;
			if (AFX_DAO_NEXT == iDir)
				pInfo = NewList.GetHead ();				
			else
			{
			//	letzter Satz soll 1. werden					
				pos = NewList.FindIndex (NewList.GetCount () - 1);
				pInfo = NewList.GetAt (pos);
			}

			ASSERT (NULL != pInfo);
			SetBookmark (pInfo -> m_varBookMark);
			pInfo -> m_bFirst = TRUE;

		//	jetzt Liste umkopieren
			m_RecordInfoList.RemoveAll ();			// alte Liste zuvor löschen
			pos = NewList.GetHeadPosition ();
			while (NULL != pos)
				m_RecordInfoList.AddTail (NewList.GetNext (pos));					
			NewList.CPtrList::RemoveAll ();
			bResOp = TRUE;	
			// JG
#pragma MSG("m_bValid accessing function")
//			m_bValid = TRUE;
			// alles OK		
		}	// Seek failed
		else
		{
			// hier wird zu dem alten Satz gegangen
			SetBookmark (varOldErz);				// es wurde kein weiterer Erzeuger gefunden
		}
	}
	catch (CException *e)
	{
		if (e -> IsKindOf (RUNTIME_CLASS(CDaoException)))
			::DisplayDaoException ((CDaoException*) e);
		else
			e -> ReportError ();
		if (varOldErz.vt != VT_EMPTY)
			SetBookmark (varOldErz);
		throw;										// Exception weiterleiten
	}
	
	return bResOp;		// Operationflag setzen							
}