Ejemplo n.º 1
0
void CWListView::OnEditInsertEntry()
{
	//CListCtrl & clc = GetListCtrl( );
	int iAtItem = getFirstSelectedRow();
	if(iAtItem == -1)	// if no selection
		iAtItem = -1; // stick it at the end

#ifndef mr270
	BOOL bIsAmple=TRUE;
	if( m_pTopic->m_label == "Synthesis Tests" )
	{bIsAmple=FALSE;}
	m_pList->setTypeOfTest(bIsAmple);
#endif //270

#ifndef mr270
	CLangModelsDoc *pdoc = (CLangModelsDoc*) GetDocument();
	pdoc->getLang();
	CCarlaLanguage *pLang = pdoc->m_pLang;
	char cCommentChar = pLang->getCommentChar();
	m_pList->setCommentChar(cCommentChar);
	m_pList->setTestEditModel(pLang->m_pTestEditModel);
#endif // mr270

	int iRow = m_pList->insertNewItem(m_listCtrl, iAtItem, 0);
	if (iRow==-1)
		return;
	if(! (m_pList->m_dwFlags & CWList::ITEMS_HAVE_DIALOG))
		m_listCtrl.EditSubLabel(iRow, 0); // do in-place edit

	m_listCtrl.RedrawItems(iAtItem, m_listCtrl.GetItemCount());

	GetDocument()->SetModifiedFlag(); //((CTabbedTreeDoc*)GetDocument())->SetModifiedFlag(TRUE);
}
Ejemplo n.º 2
0
void CWListView::OnEditProperties()
{
	int iRow = getFirstSelectedRow();
	if(iRow<0)
		return;

	// could be a subclass of CWListEntry, an evironment row, or a comment row (<-- really? i don't think we allow comment rows)
	CWListRowItem *pRowItem = getRowItem(iRow);
	if(pRowItem )
	{
		if(!pRowItem->IsKindOf(RUNTIME_CLASS(CWListEntry)))
			pRowItem =	pRowItem->owningEntry();	// open the dialog on the full entry

		BOOL bChanged = TRUE;
#ifndef hab214
		if(m_pList->m_dwFlags & CWList::ITEMS_HAVE_DIALOG ||
		   (pRowItem->IsKindOf(RUNTIME_CLASS(CListEntryComment))) ||
		   (pRowItem->IsKindOf(RUNTIME_CLASS(CListEntryTestData))))
#else //hab214
		if(m_pList->m_dwFlags & CWList::ITEMS_HAVE_DIALOG)
#endif //hab214

		{
#ifndef mr270
			BOOL bIsAmple=TRUE;
			if( m_pTopic->m_label == "Synthesis Tests" )
			{
				bIsAmple=FALSE;
			}

			CLangModelsDoc *pdoc = (CLangModelsDoc*) GetDocument();
			pdoc->getLang();
			CCarlaLanguage *pLang = pdoc->m_pLang;
			char cCommentChar = pLang->getCommentChar();
			pRowItem->setCommentChar(cCommentChar);

			pRowItem->setTypeOfTest(bIsAmple);
			pRowItem->setTestEditModel(pLang->m_pTestEditModel);
#endif // mr270
			bChanged = pRowItem->doEditDialog(m_listCtrl);
		}
		else
			m_listCtrl.EditSubLabel(iRow, 0); // do in-place edit

		//m_listCtrl.Update(iRow);
		// update all the way to the end in case the number of rows this takes
		//	up has changed, as when environments are added or removed
		if(bChanged)
		{
			m_listCtrl.RedrawItems(iRow, 1+m_listCtrl.GetItemCount());
			GetDocument()->SetModifiedFlag();//((CTabbedTreeDoc*)GetDocument())->setModified(TRUE);
		}
	}
}
Ejemplo n.º 3
0
// jdh 11/9/99 Added option to show "From Source" rather than "To Target"
void CWInterface::populateTransferTab()
{
	ASSERTX(m_pLang);

	// jdh dec 98 code was this way, looks wrong
	//if(m_pTransferTab)
	//	delete m_topicTabs.GetAt(m_iTransferTabIndex);
	// else
	//		m_iTransferTabIndex  = m_topicTabs.Add(m_pTransferTab);
	//m_pTransferTab = new CWTopicTab(getTransferTabLabel() );

	// replace the existing tab with this new one
	BOOL bFix = (m_pCurrentTopicTab == m_pTransferTab);
	if(m_pTransferTab)
		delete m_topicTabs.GetAt(m_iTransferTabIndex);

	m_pTransferTab = new CWTopicTab(getTransferTabLabel() );
	if(bFix)
		m_pCurrentTopicTab = m_pTransferTab;

	if(m_iTransferTabIndex <0) // first time
		m_iTransferTabIndex  = m_topicTabs.Add(m_pTransferTab);
	else
		m_topicTabs.SetAt(m_iTransferTabIndex, m_pTransferTab);

	// now for each language this language is set up to transfer to,
	// we insert a section for the data on how to transfer to that language

	if(!m_pLang->getTransferModels().GetSize())
	{
		CWHeadingTopic *pHeading;
		pHeading = new CWHeadingTopic(m_pTransferTab, _T("No Transfer Models"));
		m_pTransferTab->Add(pHeading);
	}
	else
	{
		int i;
		if(m_pLang->m_wDisplayFlags & CCarlaLanguage::kLocateTransferWithTarget)
			// show "From Source" rather than "To Target"
			for(i=0; i<m_pLang->getTransferModels().GetSize(); i++)
			{
				CTransferModelSet* pTMS = m_pLang->getTransferModels()[i];
				CCarlaLanguage* pL = pTMS->getTargetLang();
				// now find our language it that language's list of transfermodels
				for(int x=0; x<pL->getTransferModels().GetSize(); x++)
					if( pL->getTransferModels()[x]->getTargetLang() == m_pLang)
					{
						// add it to the list as "From foo"
						CString s;
						s.Format(_T("From %s"), (LPCTSTR)pL->getName());
						addTransferModel(pL->getTransferModels()[x], m_pTransferTab, s);
						break;
					}
			}
		else
			for(i=0; i<m_pLang->getTransferModels().GetSize(); i++)
			{
				CTransferModelSet* pTMS = m_pLang->getTransferModels()[i];
				CString s;
				s.Format(_T("To %s"), (LPCTSTR)pTMS->getTargetLang()->getName());
				addTransferModel(pTMS, m_pTransferTab, s);
			}
	}
}
Ejemplo n.º 4
0
void CQuickParseView::OnQuickParseGo()
{
	CWaitCursor wc;

	//---- BRING THE CONTROL FILES UP TO DATE ON THE DISK (added feb 8, 99)
	theApp.getProject()->synchronizeExternals();


	CQuickParseDoc* pDoc = (CQuickParseDoc*)GetDocument();
	UpdateData(TRUE); // get data out of form and into our members
	m_sInput.TrimLeft();
	if(m_sInput.IsEmpty())
		return;

	try
	{
//		sndPlaySound("QuickParse", SND_ASYNC );

		CCarlaLanguage* pSourceLang = pDoc->m_pSourceLang;
		ASSERTX(pSourceLang);
		pSourceLang->prepareMFSForProcessors(); // among other things, get the comment character into the MFS

		CSrcTextProcessingPrefs procPrefs(pSourceLang,
									NULL,
									CProcessingPrefs::kSourceAna);


		CProcessStatus status(	&procPrefs,
								m_sInput,
								pSourceLang,
								pSourceLang->getMFS(),
								NULL,	// output lang
								NULL); // output mfs

		// jdh 3/14/2000 changed to this from some custom code
		if (!status.setupTempDir(pSourceLang->getName()))
			return;	// assumes the user has already been informed

	// added jdh 3/13/2000
		m_bDidRefresh = FALSE; // will be set to TRUE if we refresh
		BOOL bDidGetPreprocessedDicts = status.loadPreprocessedSrcDictsArrayFromLang();
		if(!bDidGetPreprocessedDicts || m_bManualRefreshPending || getNeedDictPreprocessing(status))
			if(!this->preprocessDicts(&status))
				return;

		prepareAmpleProcess();
		loadAmpleOptions();
		m_sOutput = ""; // in case of an exception
		CString sTraceOutput;


		CString sPath;
		sPath.Format(_T("%s\\QP-Ample-Trace.log"), (LPCTSTR)status.getTempDirectory());


#ifndef hab218
		if (m_bTrace && m_bManualParse)
		  {
			m_sTraceMorphs = _T("");
			loadAmpleOptions();
			getManualParse(status, sPath, pSourceLang);
			status.m_sRAWString = m_sInput;
			loadAmpleOptions();
		  }
#endif // hab218
	// DO THE PARSING
		if(!m_bTrace)
		{	// !!! this path is needed if we want to check for errors
			m_pAmpleProcess->processRAWTextString(status, sPath);
		}
		else
		{
			m_pAmpleProcess->processRAWTextString(status, sPath);
		//	m_sOutput = status.m_sRAWString;

			TRY
			{
				CFile log(sPath, CFile::modeRead);
				DWORD sz = log.GetLength();
				if(sz)
				{
					/* If the buffer is ridiculously big (e.g. > 1MB) then the likelyhood
					 * a stack overflow increases - so we truncate early rather than later
					 * let's say that 3 bytes for one UTF8 char is a good guess
					 */
					if (sz > MAX_TRACEOUTPUT * 3)
						sz = MAX_TRACEOUTPUT * 3;
					// on the heap rather than on the stack - stack overflows are easily created
					char* buf = (char *) malloc(sz+2);
					ASSERTX(buf);
					int iReadBytes = log.Read(buf, sz);
					buf[iReadBytes] = '\0'; //terminate it
					USES_CONVERSION_U8;
					sTraceOutput = U82CT(buf);
					free(buf);
				}
				log.Close();
			}
			CATCH( CFileException, e )
			{
#ifdef Before1_04
				checkForFileError(PATH);
#else  // hab 1.04
				checkForFileError(sPath);
#endif // Before1_04
			}
			END_CATCH
		}

		// build the parse part of the answer
		CAmpleResult* pAResult = CAmpleResult::buildResult(status.m_sRAWString);
		if(pAResult)
		{
#ifndef hab218
			m_sOutput += pAResult->getStringRepresentation();
#else //hab218
			m_sOutput = pAResult->getStringRepresentation();
#endif // hab218
			delete pAResult;
		}
		else
			m_sOutput.Format (_T("You have encountered a bug in either CarlaStudio or the Ample DLL.  CarlaStudio could not understand the Ample DLL's answer, which was: %s"), (LPCTSTR)status.m_sRAWString);

		// add the trace part of the answer
		if(m_bTrace)
			m_sOutput += sTraceOutput;

		// do we need to truncate the result?
		TRACE(_T("m_sOutput.GetLength() =%d"), m_sOutput.GetLength());
		if(m_sOutput.GetLength() > MAX_TRACEOUTPUT)
		{
			m_sOutput = m_sOutput.Left(MAX_TRACEOUTPUT);
			m_sOutput += _T("\r\n--Ample's output is too long to fit here.  It has been truncated. ");
		}

		// jdh 3/14/2000 store this set of dictionaries.  we do it only now in so that an error in processing them will be in the user's face
		status.storePreprocessedSrcDictsArrayInLang();

	}
// called by OnNewDocument()
// returns FALSE if the user cancels the dialog
BOOL CProjectDoc::doNewFromCarlaMenu(CString& sProjectPath)
{
	CWizNewFromCarla dlg(this);

	// stick in CCarlaLanguages's default font
	//getSourceLang()->getFont()->GetLogFont(&dlg.m_srcLangDisplayPage.m_logFont);

	if(IDOK != dlg.DoModal())
		return FALSE;

	// note that during the wizard we parsed in the carla.set file

	sProjectPath = dlg.m_projectPage.m_sProjectPath;
	SetDirectory(sProjectPath); // make this the working directory

	if(!getSourceLang() || !getSourceLang()->getAbrev().GetLength())
	{
		MessageBox( NULL, "This does not appear to be a valid CARLA.SET file (no \\src sMarker found)\n", NULL, MB_OK);
		return FALSE;
	}

	CCarlaLanguage* pLang = m_pLangDocs[0]->getLang();
	ASSERTX(pLang);
	//pLang->setAbrev(dlg.m_srcLangDisplayPage.m_sAbrev);
	//pLang->setName(dlg.m_srcLangDisplayPage.m_sName);
	//pLang->setFont(&dlg.m_srcLangDisplayPage.m_logFont);
	pLang->readLangDisplayPage(dlg.m_srcLangDisplayPage);

	pLang->readCARLAMenuLangFile(dlg.m_cmenuPage.m_cCommentChar);

	if(m_pLangDocs.GetSize()==2)	// if there was a target lang specified
	{
		pLang = m_pLangDocs[1]->getLang();
		ASSERTX(pLang);
	//	pLang->readCARLAMenuLangFile(dlg.m_cmenuPage.m_cCommentChar);
	//	pLang->setAbrev(dlg.m_tarLangDisplayPage.m_sAbrev);
	//	pLang->setName(dlg.m_tarLangDisplayPage.m_sName);
		//pLang->setFont(&dlg.m_tarLangDisplayPage.m_logFont);
		pLang->readLangDisplayPage(dlg.m_tarLangDisplayPage);
		pLang->readCARLAMenuLangFile(dlg.m_cmenuPage.m_cCommentChar);

		// if there were two languages, tell the first one (the source) to copy in the
		// control files for transfering to the other language.  We skip asking to got
		// the other direction to, out of the lack of expecation that those files exist.
		// It might not do any harm to try, though, if someone comes up with a reason.
		m_pLangDocs[0]->getLang()->setConversionTargetLang(m_pLangDocs[1]->getLang());
	}



/*	getSourceLang()->setAbrev(dlg.m_srcLangDisplayPage.m_sAbrev);
	getSourceLang()->setName(dlg.m_srcLangDisplayPage.m_sName);
	getSourceLang()->setFont(&dlg.m_srcLangDisplayPage.m_logFont);
	getSourceLang()->readCARLAMenuLangFile();

	if(getTargetLang())
	{
		getTargetLang()->readCARLAMenuLangFile();
		getTargetLang()->setAbrev(dlg.m_tarLangDisplayPage.m_sAbrev);
		getTargetLang()->setName(dlg.m_tarLangDisplayPage.m_sName);
		getTargetLang()->setFont(&dlg.m_tarLangDisplayPage.m_logFont);

		// won't find any files because carlamenu is one-way transfer only,
		//		so leave this one out
		//			getTargetLang()->setConversionTargetLang(m_pSource);
		getSourceLang()->setConversionTargetLang(getTargetLang());
	}
*/
	return TRUE;
}
Ejemplo n.º 6
0
BOOL CInputDoc::doRunProcessors(CRemoteCommand* pRemoteCmd/*=NULL*/)
{
	CWnd* pWnd = getWindow();
	if(pWnd)
		pWnd->BringWindowToTop();

	if(IsModified())	// if changed the contents of the file we're processing
		OnSaveDocument(GetPathName());

	CCarlaLanguage *pSourceLang = getProcessingPrefs()->getSrcLang(); // could be null
	CCarlaLanguage *pTargetLang = getProcessingPrefs()->getTarLang(); // could be null
	ASSERTX(m_strPathName.GetLength());

	#define GOAL getProcessingPrefs()->getGoal()

	// on remote calls, we can override user prefs. Sorry this is all so ugly
	if(pRemoteCmd)
	{
		getProcessingPrefs()->setGoal(pRemoteCmd->iGoal);
		pSourceLang = pRemoteCmd->pSourceLang ;
		if(pSourceLang)
			getProcessingPrefs()->setSrcLang(pSourceLang);
		pTargetLang = pRemoteCmd->pTargetLang;
		if(pTargetLang)
			getProcessingPrefs()->setTarLang(pTargetLang);
		SetModifiedFlag(TRUE);// will also fix the title
	}

	// make the new status structure, which keeps track of which files have been
	// created and are in line for processing, among other things

	if(m_pProcessStatus)
		delete m_pProcessStatus;
	m_pProcessStatus = new CProcessStatus(m_strPathName,
								getProcessingPrefs(),
								pSourceLang,
								(pSourceLang!=0)?pSourceLang->getMFS():NULL,
								pTargetLang,
								(pTargetLang!=0)?pTargetLang->getMFS():NULL);

	//----- ask Shoebox, if it is running, to do a save all
	// note: if this was invoked by a call from CSRemote, then the send will hang us forever
	// thus, we have this bRemoteCall flag to prevent that.  If we are called from
	// Shoebox, it will have saved everything anyways as part of its batch file command
	if(!pRemoteCmd)
		SendMessage(HWND_BROADCAST, wm_RemoteSaveAll, NULL, NULL);

	//------ SETUP THE TEMP DIRECTORY ----------------------

	if( getCanDoAnalysis() || getProcessingPrefs()->getDoTransfer()
			|| getProcessingPrefs()->getDoInterlinearize()) // JDH 5/28/99 Added to allow Interlinearizing ANA files
	{
		ASSERTX(pSourceLang);
		if (!m_pProcessStatus->setupTempDir(pSourceLang->getName()))
			return FALSE;
	}
	else	// synthesis only
	{
		ASSERTX(pTargetLang);
		if (!m_pProcessStatus->setupTempDir(pTargetLang->getName()))
			return FALSE;
	}

	// load stuff that processors will commonly need, but which doesn't really
	// belong conceptually to the mfs into it, so that the processors can avoid
	// having to know about CCarlaLanguage just to get at the comment character, for example

	if(pSourceLang)
		pSourceLang->prepareMFSForProcessors();
	if(pTargetLang)
		pTargetLang->prepareMFSForProcessors();

	//---- SETUP PROGRESS BAR
	if( getCanDoAnalysis())
		m_pProcessStatus->expectSequenceWithCount(getSrcLang()->getAnalysisSequence()->getProcessorCount());
	if( getProcessingPrefs()->getDoInterlinearize())
		m_pProcessStatus->expectSequenceWithCount(getSrcLang()->getInterlinearSequence()->getProcessorCount());

	if(getProcessingPrefs()->getDoTransfer())
	{
		CTransferProcessSequence* pTSeq = getSrcLang()->getTransferSequence( pTargetLang);
		if(pTSeq)
			m_pProcessStatus->expectSequenceWithCount(pTSeq->getProcessorCount());
	}
	if(getProcessingPrefs()->getDoSynthesis())	// actually, i think you *always* have a synth seq
	{
		CSynthesisProcessSequence* pSSeq = getSrcLang()->getSynthesisSequence();
		if(pSSeq)
			m_pProcessStatus->expectSequenceWithCount(pSSeq->getProcessorCount());
	}


	//---- BRING THE CONTROL FILES UP TO DATE ON THE DISK
	theApp.getProject()->synchronizeExternals();

	//---- ANALYSIS ----------------------------------------------------------

	BOOL bOK = TRUE;
	if( getCanDoAnalysis())
	{
		CProcessSequence* pAnalysisSequence = getSrcLang()->getAnalysisSequence();

		m_pProcessStatus->setCurrentSequenceFunction(pAnalysisSequence->getFunctionCode());
		m_pProcessStatus->setInputLang(pSourceLang);
		m_pProcessStatus->setOutputLang(NULL);
		// do the analysis

		bOK = pAnalysisSequence->continueProcessing(m_pProcessStatus);

		// copy the analyzed text to the user's directory
		if(bOK )
		{
			CPathDescriptor newPath(pSourceLang->getMFS()->getOutputDirAnalyzedANA()+m_pProcessStatus->m_sFileNameRoot+".ana");
			redirectOutputFile(GOAL, CProcessingPrefs::kSourceAna,
				m_pProcessStatus->sANAPath,
				newPath,
				m_pProcessStatus);
		}
	}

	//---- INTERLINEAR ----------------------------------------------------------

	if(bOK && getProcessingPrefs()->getDoInterlinearize())
	{
		ASSERTX(pSourceLang);
		CProcessSequence* pS = pSourceLang->getInterlinearSequence();
		ASSERTX(pS);

		m_pProcessStatus->setInputLang(pSourceLang);
#ifndef hab15a4
		m_pProcessStatus->setOutputLang(pSourceLang); // hab 1999.09.17
		// a final CC pass will use the Output Language;
		// it needs to be set to the Source lang here (at least it worked for me...)
#else
		m_pProcessStatus->setOutputLang(NULL);
#endif
		m_pProcessStatus->setCurrentSequenceFunction(pS->getFunctionCode());
		bOK = pS->continueProcessing(m_pProcessStatus);

		if(bOK )//&& GOAL==CProcessingPrefs::kGlossedInterlinear)
		{
			CString sDestDir;
			CPathDescriptor newPath ;
			if(pRemoteCmd)
			{
				switch(pRemoteCmd->eOutputLocation)
				{
					case CRemoteCommand::csSameFolderAsInput:
							sDestDir = ::getDirectory(m_strPathName);
							break;
					case CRemoteCommand::csSpecifiedPath:
					case CRemoteCommand::csReplaceInput:
							newPath = pRemoteCmd->sDesiredOutputPath;
							break;
					default: throw("Unknown OutputLocation setting");
							break;
				}
			}
			else if(getProcessingPrefs()->m_dwFlags & CProcessingPrefs::kOutputItxToSameDir) // for morris
				sDestDir = ::getDirectory(m_strPathName);
			else // copy to interlinear output dir
				sDestDir = pSourceLang->getMFS()->getOutputDirInterlinear();

			if(newPath.GetLength() == 0)
				newPath = sDestDir+m_pProcessStatus->m_sFileNameRoot+".itx";
			//m_pProcessStatus->sInterlinearPath.copyTo(newPath);

			redirectOutputFile(GOAL, CProcessingPrefs::kGlossedInterlinear,
				m_pProcessStatus->sInterlinearPath,
				newPath,
				m_pProcessStatus);

			if(pRemoteCmd)
				pRemoteCmd->sActualOutputPath=newPath;
		}
	}

	//---- TRANSFER ----------------------------------------------------------

	if(bOK && getProcessingPrefs()->getDoTransfer())
	{
		//CCarlaLanguage* pTarget = getProcessingPrefs()->getTarLang();
		ASSERTX(pTargetLang);
		CTransferProcessSequence* pTransferSequence = getSrcLang()->getTransferSequence(pTargetLang);
		ASSERTX(pTransferSequence);
		m_pProcessStatus->setInputLang(pSourceLang);
		m_pProcessStatus->setOutputLang(pTargetLang);
		m_pProcessStatus->setCurrentSequenceFunction(pTransferSequence->getFunctionCode());

		bOK = pTransferSequence->continueProcessing(m_pProcessStatus);
		if(bOK )//&& GOAL==CProcessingPrefs::kTargetANA)
		{
			//CPathDescriptor x = pTargetLang->getMFS()->getOutputDirTransferedANA();
			//CString z = "s" + x  + "v";

			CPathDescriptor newPath(pTargetLang->getMFS()->getOutputDirTransferedANA()+m_pProcessStatus->m_sFileNameRoot+".ana");
			redirectOutputFile(GOAL, CProcessingPrefs::kTargetANA,
				m_pProcessStatus->sANAPath,
				newPath,
				m_pProcessStatus);
			//m_pProcessStatus->sANAPath.copyTo(pTargetLang->getMFS()->getOutputDirTransferedANA()+m_pProcessStatus->m_sFileNameRoot+".ana");

			if(pRemoteCmd)
				pRemoteCmd->sActualOutputPath=newPath;
		}
	}

	//---- SYNTHESIS ----------------------------------------------------------

	if(bOK && getProcessingPrefs()->getDoSynthesis())
	{
		ASSERTX(pTargetLang);
		//CCarlaLanguage* pTarget = getProcessingPrefs()->getTarLang();
		CProcessSequence* pS = pTargetLang->getSynthesisSequence();
		ASSERTX(pS);
#ifndef hab15a4
		m_pProcessStatus->setInputLang(pTargetLang); // hab 1999.09.17
		// a final CC pass will use the Input Language;
		// it needs to be set to the Target lang here  (at least it worked for me...)
#else
		m_pProcessStatus->setInputLang(NULL);
#endif
		m_pProcessStatus->setOutputLang(pTargetLang);
		m_pProcessStatus->setCurrentSequenceFunction(pS->getFunctionCode());
		bOK = pS->continueProcessing(m_pProcessStatus);

		// copy the synthesized text to the user's directory
		if(bOK)// && GOAL==CProcessingPrefs::kTargetText)
		{
			CPathDescriptor newPath;
			CString sDestDir;
			if(pRemoteCmd)
			{
				switch(pRemoteCmd->eOutputLocation)
				{
					case CRemoteCommand::csSameFolderAsInput:
							sDestDir = ::getDirectory(m_strPathName);
							break;
					case CRemoteCommand::csSpecifiedPath:
							newPath = pRemoteCmd->sDesiredOutputPath;
							break;
					// this case now allowed by csbridge, but would be if they scripted directly
					case CRemoteCommand::csReplaceInput:
							throw("Whoops.  You probably didn't mean to say that CStudio should do a transfer that overwrites the initial file.");
							break;
					default: throw("Unknown OutputLocation setting");
							break;
				}
			}
			else
				sDestDir = pTargetLang->getMFS()->getOutputDirSynthesizedText();

			if(newPath.GetLength() == 0)
				newPath = sDestDir+m_pProcessStatus->m_sFileNameRoot+"_"+pTargetLang->getAbrev()+".txt";

			redirectOutputFile(GOAL, CProcessingPrefs::kTargetText,
				m_pProcessStatus->sRAWPath,
				newPath,
				m_pProcessStatus);
			if(pRemoteCmd)
					pRemoteCmd->sActualOutputPath=newPath;
		}
	}

	if(bOK)
		m_pProcessStatus->finishedProcessing();
		storeAvailablePanels();

	loadResultPanels(bOK, m_pProcessStatus); // don't warn about missing files if there was an error already reported
	m_pProcessStatus->closeProgressDialog();

	ASSERTX(m_pView);	//!!!!!!!WHO'S SETTING THIS?
	m_pView->updatePanels();

#ifndef rde265
	//----- ask Shoebox, to refresh all (if this isn't a remote command)
	if(!pRemoteCmd)
#else
	//----- ask Shoebox, if it is running, to do a save all
#endif  // rde265
	PostMessage(HWND_BROADCAST, wm_RemoteRefreshAll, NULL, NULL);	// don't wait for it to finish that

	return bOK;
}