void nsFilePicker::ReadValuesFromFileChooser(GtkWidget *file_chooser) { mFiles.Clear(); if (mMode == nsIFilePicker::modeOpenMultiple) { mFileURL.Truncate(); GSList *list = _gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(file_chooser)); g_slist_foreach(list, ReadMultipleFiles, static_cast<gpointer>(&mFiles)); g_slist_free(list); } else { gchar *filename = _gtk_file_chooser_get_uri (GTK_FILE_CHOOSER(file_chooser)); mFileURL.Assign(filename); g_free(filename); } GtkFileFilter *filter = _gtk_file_chooser_get_filter (GTK_FILE_CHOOSER(file_chooser)); GSList *filter_list = _gtk_file_chooser_list_filters (GTK_FILE_CHOOSER(file_chooser)); mSelectedType = static_cast<PRInt16>(g_slist_index (filter_list, filter)); g_slist_free(filter_list); // Remember last used directory. nsCOMPtr<nsILocalFile> file; GetFile(getter_AddRefs(file)); if (file) { nsCOMPtr<nsIFile> dir; file->GetParent(getter_AddRefs(dir)); nsCOMPtr<nsILocalFile> localDir(do_QueryInterface(dir)); if (localDir) { localDir.swap(mPrevDisplayDirectory); } } }
void K3bCddbOptionTab::slotLocalDirAdd() { if( !m_editLocalDir->text().isEmpty() ) { QString localDir( m_editLocalDir->text() ); QListViewItemIterator it( m_viewLocalDir ); while( it.current() ) { if ( it.current()->text(0) == localDir ) return; ++it; } (void)new KListViewItem( m_viewLocalDir, m_viewLocalDir->lastItem(), localDir ); enDisableButtons(); } }
void CalculateAABB (const NewtonCollision* const collision, const dMatrix& matrix, dVector& minP, dVector& maxP) { for (int i = 0; i < 3; i ++) { dVector support(0.0f); dVector dir (0.0f); dir[i] = 1.0f; dVector localDir (matrix.UnrotateVector (dir)); NewtonCollisionSupportVertex (collision, &localDir[0], &support[0]); support = matrix.TransformVector (support); maxP[i] = support[i]; localDir = localDir.Scale (-1.0f); NewtonCollisionSupportVertex (collision, &localDir[0], &support[0]); support = matrix.TransformVector (support); minP[i] = support[i]; } }
void CalculateAABB (const NewtonCollision* const collision, const dMatrix& matrix, dVector& minP, dVector& maxP) { dFloat skinThickness = NewtonCollisionGetSkinThickness (collision) * 0.125f; for (int i = 0; i < 3; i ++) { dVector support; dVector dir (0.0f, 0.0f, 0.0f, 0.0f); dir[i] = 1.0f; dVector localDir (matrix.UnrotateVector (dir)); NewtonCollisionSupportVertex (collision, &localDir[0], &support[0]); support = matrix.TransformVector (support); maxP[i] = support[i] - skinThickness; localDir = localDir.Scale (-1.0f); NewtonCollisionSupportVertex (collision, &localDir[0], &support[0]); support = matrix.TransformVector (support); minP[i] = support[i] + skinThickness; } }
void PropagateLocalMkdir::start() { if (_propagator->_abortRequested.fetchAndAddRelaxed(0)) return; QDir newDir(_propagator->_localDir + _item._file); QString newDirStr = QDir::toNativeSeparators(newDir.path()); if( Utility::fsCasePreserving() && _propagator->localFileNameClash(_item._file ) ) { qDebug() << "WARN: new directory to create locally already exists!"; done( SyncFileItem::NormalError, tr("Attention, possible case sensitivity clash with %1").arg(newDirStr) ); return; } QDir localDir(_propagator->_localDir); if (!localDir.mkpath(_item._file)) { done( SyncFileItem::NormalError, tr("could not create directory %1").arg(newDirStr) ); return; } done(SyncFileItem::Success); }
void SftpChannelPrivate::handleMkdirStatus(const JobMap::Iterator &it, const SftpStatusResponse &response) { SftpMakeDir::Ptr op = it.value().staticCast<SftpMakeDir>(); if (op->parentJob == SftpUploadDir::Ptr()) { handleStatusGeneric(it, response); return; } if (op->parentJob->hasError) { m_jobs.erase(it); return; } typedef QMap<SftpMakeDir::Ptr, SftpUploadDir::Dir>::Iterator DirIt; DirIt dirIt = op->parentJob->mkdirsInProgress.find(op); Q_ASSERT(dirIt != op->parentJob->mkdirsInProgress.end()); const QString &remoteDir = dirIt.value().remoteDir; if (response.status == SSH_FX_OK) { emit dataAvailable(op->parentJob->jobId, tr("Created remote directory '%1'.").arg(remoteDir)); } else if (response.status == SSH_FX_FAILURE) { emit dataAvailable(op->parentJob->jobId, tr("Remote directory '%1' already exists.").arg(remoteDir)); } else { op->parentJob->setError(); emit finished(op->parentJob->jobId, tr("Error creating directory '%1': %2") .arg(remoteDir, response.errorString)); m_jobs.erase(it); return; } QDir localDir(dirIt.value().localDir); const QFileInfoList &dirInfos = localDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); foreach (const QFileInfo &dirInfo, dirInfos) { const QString remoteSubDir = remoteDir + QLatin1Char('/') + dirInfo.fileName(); const SftpMakeDir::Ptr mkdirOp( new SftpMakeDir(++m_nextJobId, remoteSubDir, op->parentJob)); op->parentJob->mkdirsInProgress.insert(mkdirOp, SftpUploadDir::Dir(dirInfo.absoluteFilePath(), remoteSubDir)); createJob(mkdirOp); } const QFileInfoList &fileInfos = localDir.entryInfoList(QDir::Files); foreach (const QFileInfo &fileInfo, fileInfos) { QSharedPointer<QFile> localFile(new QFile(fileInfo.absoluteFilePath())); if (!localFile->open(QIODevice::ReadOnly)) { op->parentJob->setError(); emit finished(op->parentJob->jobId, tr("Could not open local file '%1': %2") .arg(fileInfo.absoluteFilePath(), localFile->errorString())); m_jobs.erase(it); return; } const QString remoteFilePath = remoteDir + QLatin1Char('/') + fileInfo.fileName(); SftpUploadFile::Ptr uploadFileOp(new SftpUploadFile(++m_nextJobId, remoteFilePath, localFile, SftpOverwriteExisting, op->parentJob)); createJob(uploadFileOp); op->parentJob->uploadsInProgress.append(uploadFileOp); }
void CPlayerRotation::ClampAngles() { { //cap up/down looking float minAngle,maxAngle; GetStanceAngleLimits(minAngle,maxAngle); float currentViewPitch=GetLocalPitch(); float newPitch = currentViewPitch + m_deltaAngles.x; if(newPitch < minAngle) newPitch = minAngle; else if(newPitch > maxAngle) newPitch = maxAngle; m_deltaAngles.x = newPitch - currentViewPitch; } { //further limit the view if necessary float limitV = m_params.vLimitRangeV; float limitH = m_params.vLimitRangeH; Vec3 limitDir = m_params.vLimitDir; float limitVUp = m_params.vLimitRangeVUp; float limitVDown = m_params.vLimitRangeVDown; if(m_player.m_stats.isFrozen.Value()) { float clampMin = g_pGameCVars->cl_frozenAngleMin; float clampMax = g_pGameCVars->cl_frozenAngleMax; float frozenLimit = DEG2RAD(clampMin + (clampMax-clampMin)*(1.f-m_player.GetFrozenAmount(true))); if(limitV == 0 || limitV>frozenLimit) limitV = frozenLimit; if(limitH == 0 || limitH>frozenLimit) limitH = frozenLimit; if(g_pGameCVars->cl_debugFreezeShake) { static float color[] = {1,1,1,1}; gEnv->pRenderer->Draw2dLabel(100,200,1.5,color,false,"limit: %f", RAD2DEG(frozenLimit)); } } if(m_player.m_stats.isOnLadder) { limitDir = -m_player.m_stats.ladderOrientation; limitH = DEG2RAD(40.0f); } if((limitH+limitV+limitVUp+limitVDown) && limitDir.len2()>0.1f) { //A matrix is built around the view limit, and then the player view angles are checked with it. //Later, if necessary the upVector could be made customizable. Vec3 forward(limitDir); Vec3 up(m_baseQuat.GetColumn2()); Vec3 right(-(up % forward)); right.Normalize(); Matrix33 limitMtx; limitMtx.SetFromVectors(right,forward,right%forward); //gEnv->pRenderer->GetIRenderAuxGeom()->DrawLine(m_player.GetEntity()->GetWorldPos(), ColorB(0,0,255,255), m_player.GetEntity()->GetWorldPos() + limitMtx.GetColumn(0), ColorB(0,0,255,255)); //gEnv->pRenderer->GetIRenderAuxGeom()->DrawLine(m_player.GetEntity()->GetWorldPos(), ColorB(0,255,0,255), m_player.GetEntity()->GetWorldPos() + limitMtx.GetColumn(1), ColorB(0,255,0,255)); //gEnv->pRenderer->GetIRenderAuxGeom()->DrawLine(m_player.GetEntity()->GetWorldPos(), ColorB(255,0,0,255), m_player.GetEntity()->GetWorldPos() + limitMtx.GetColumn(2), ColorB(255,0,0,255)); limitMtx.Invert(); Vec3 localDir(limitMtx * m_viewQuat.GetColumn1()); // Vec3 localDir(limitMtx * m_player.GetEntity()->GetWorldRotation().GetColumn1()); Ang3 limit; if(limitV) { limit.x = asinf(localDir.z) + m_deltaAngles.x; float deltaX(limitV - fabs(limit.x)); if(deltaX < 0.0f) m_deltaAngles.x += deltaX*(limit.x>0.0f?1.0f:-1.0f); } if(limitVUp || limitVDown) { limit.x = asinf(localDir.z) + m_deltaAngles.x; if(limit.x>=limitVUp && limitVUp!=0) { float deltaXUp(limitVUp - limit.x); m_deltaAngles.x += deltaXUp; } if(limit.x<=limitVDown && limitVDown!=0) { float deltaXDown(limitVDown - limit.x); m_deltaAngles.x += deltaXDown; } } if(limitH) { limit.z = cry_atan2f(-localDir.x,localDir.y) + m_deltaAngles.z; float deltaZ(limitH - fabs(limit.z)); if(deltaZ < 0.0f) m_deltaAngles.z += deltaZ*(limit.z>0.0f?1.0f:-1.0f); } } } }
//------------------------------------------------------------------------- // // Show - Display the file dialog // //------------------------------------------------------------------------- NS_IMETHODIMP nsFilePicker::Show(PRInt16 *retval) { NS_ENSURE_ARG_POINTER(retval); PRBool result = PR_FALSE; nsCAutoString fileBuffer; char *converted = ConvertToFileSystemCharset(mDefault); if (nsnull == converted) { LossyCopyUTF16toASCII(mDefault, fileBuffer); } else { fileBuffer.Assign(converted); nsMemory::Free( converted ); } char *title = ConvertToFileSystemCharset(mTitle); if (nsnull == title) title = ToNewCString(mTitle); nsCAutoString initialDir; if (mDisplayDirectory) mDisplayDirectory->GetNativePath(initialDir); // If no display directory, re-use the last one. if(initialDir.IsEmpty()) initialDir = mLastUsedDirectory; mFile.Truncate(); FILEDLG filedlg; memset(&filedlg, 0, sizeof(FILEDLG)); filedlg.cbSize = sizeof(FILEDLG); filedlg.pszTitle = title; if (mMode == modeGetFolder) { PL_strncat(filedlg.szFullFile, initialDir.get(), MAX_PATH); PL_strncat(filedlg.szFullFile, "\\", 1); PL_strncat(filedlg.szFullFile, "^", 1); filedlg.fl = FDS_OPEN_DIALOG | FDS_CENTER; filedlg.pfnDlgProc = DirDialogProc; DosError(FERR_DISABLEHARDERR); WinFileDlg(HWND_DESKTOP, mWnd, &filedlg); DosError(FERR_ENABLEHARDERR); char* tempptr = strstr(filedlg.szFullFile, "^"); if (tempptr) *tempptr = '\0'; if (filedlg.lReturn == DID_OK) { result = PR_TRUE; if (!mDisplayDirectory) mDisplayDirectory = do_CreateInstance("@mozilla.org/file/local;1"); if (mDisplayDirectory) mDisplayDirectory->InitWithNativePath(nsDependentCString(filedlg.szFullFile)); mFile.Assign(filedlg.szFullFile); } } else { PL_strncpy(filedlg.szFullFile, initialDir.get(), MAX_PATH); PL_strncat(filedlg.szFullFile, "\\", 1); PL_strncat(filedlg.szFullFile, fileBuffer.get(), MAX_PATH); filedlg.fl = FDS_CENTER; if (mMode == modeSave) { filedlg.fl |= FDS_SAVEAS_DIALOG | FDS_ENABLEFILELB; } else if (mMode == modeOpenMultiple) { filedlg.fl |= FDS_MULTIPLESEL | FDS_OPEN_DIALOG; } else { filedlg.fl |= FDS_OPEN_DIALOG; } PMYDATA pmydata; pmydata = (PMYDATA)calloc(1, sizeof(MYDATA)); filedlg.ulUser = (ULONG)pmydata; filedlg.pfnDlgProc = FileDialogProc; PRUint32 i; PSZ *apszTypeList; apszTypeList = (PSZ *)malloc(mTitles.Length()*sizeof(PSZ)+1); for (i = 0; i < mTitles.Length(); i++) { const nsString& typeWide = mTitles[i]; nsAutoCharBuffer buffer; PRInt32 bufLength; WideCharToMultiByte(0, typeWide.get(), typeWide.Length(), buffer, bufLength); apszTypeList[i] = ToNewCString(nsDependentCString(buffer.Elements())); } apszTypeList[i] = 0; filedlg.papszITypeList = (PAPSZ)apszTypeList; PSZ *apszFilterList; apszFilterList = (PSZ *)malloc(mFilters.Length()*sizeof(PSZ)+1); for (i = 0; i < mFilters.Length(); i++) { const nsString& filterWide = mFilters[i]; apszFilterList[i] = ToNewCString(filterWide); } apszFilterList[i] = 0; pmydata->papszIFilterList = (PAPSZ)apszFilterList; pmydata->ulCurExt = mSelectedType; PRBool fileExists; do { DosError(FERR_DISABLEHARDERR); WinFileDlg(HWND_DESKTOP, mWnd, &filedlg); DosError(FERR_ENABLEHARDERR); if ((filedlg.lReturn == DID_OK) && (mMode == modeSave)) { PRFileInfo64 fileinfo64; PRStatus status = PR_GetFileInfo64(filedlg.szFullFile, &fileinfo64); if (status == PR_SUCCESS) { fileExists = PR_TRUE; } else { fileExists = PR_FALSE; } if (fileExists) { if (!gpszFDSaveCaption) { HMODULE hmod; char LoadError[CCHMAXPATH]; char loadedString[256]; int length; DosLoadModule(LoadError, CCHMAXPATH, "PMSDMRI", &hmod); length = WinLoadString((HAB)0, hmod, 1110, 256, loadedString); gpszFDSaveCaption = (char*)malloc(length+1); strcpy(gpszFDSaveCaption, loadedString); length = WinLoadString((HAB)0, hmod, 1135, 256, loadedString); gpszFDFileExists = (char*)malloc(length+1); strcpy(gpszFDFileExists, loadedString); length = WinLoadString((HAB)0, hmod, 1136, 256, loadedString); gpszFDFileReadOnly = (char*)malloc(length+1); strcpy(gpszFDFileReadOnly, loadedString); int i; for (i=0;i<256 && gpszFDFileExists[i];i++ ) { if (gpszFDFileExists[i] == '%') { gpszFDFileExists[i+1] = 's'; break; } } for (i=0;i<256 && gpszFDFileReadOnly[i];i++ ) { if (gpszFDFileReadOnly[i] == '%') { gpszFDFileReadOnly[i+1] = 's'; break; } } DosFreeModule(hmod); } char pszFullText[256+CCHMAXPATH]; FILESTATUS3 fsts3; ULONG ulResponse; DosQueryPathInfo( filedlg.szFullFile, FIL_STANDARD, &fsts3, sizeof(FILESTATUS3)); if (fsts3.attrFile & FILE_READONLY) { sprintf(pszFullText, gpszFDFileReadOnly, filedlg.szFullFile); ulResponse = WinMessageBox(HWND_DESKTOP, mWnd, pszFullText, gpszFDSaveCaption, 0, MB_OK | MB_MOVEABLE | MB_WARNING); } else { sprintf(pszFullText, gpszFDFileExists, filedlg.szFullFile); ulResponse = WinMessageBox(HWND_DESKTOP, mWnd, pszFullText, gpszFDSaveCaption, 0, MB_YESNO | MB_MOVEABLE | MB_WARNING); } if (ulResponse == MBID_YES) { fileExists = PR_FALSE; } } } } while (mMode == modeSave && fileExists && filedlg.lReturn == DID_OK); if (filedlg.lReturn == DID_OK) { result = PR_TRUE; if (mMode == modeOpenMultiple) { nsresult rv; if (filedlg.papszFQFilename) { for (ULONG i=0;i<filedlg.ulFQFCount;i++) { nsCOMPtr<nsILocalFile> file = do_CreateInstance("@mozilla.org/file/local;1", &rv); NS_ENSURE_SUCCESS(rv,rv); rv = file->InitWithNativePath(nsDependentCString(*(filedlg.papszFQFilename)[i])); NS_ENSURE_SUCCESS(rv,rv); rv = mFiles.AppendObject(file); NS_ENSURE_SUCCESS(rv,rv); } WinFreeFileDlgList(filedlg.papszFQFilename); } else { nsCOMPtr<nsILocalFile> file = do_CreateInstance("@mozilla.org/file/local;1", &rv); NS_ENSURE_SUCCESS(rv,rv); rv = file->InitWithNativePath(nsDependentCString(filedlg.szFullFile)); NS_ENSURE_SUCCESS(rv,rv); rv = mFiles.AppendObject(file); NS_ENSURE_SUCCESS(rv,rv); } } else { mFile.Assign(filedlg.szFullFile); } mSelectedType = (PRInt16)pmydata->ulCurExt; } for (i = 0; i < mTitles.Length(); i++) { nsMemory::Free(*(filedlg.papszITypeList[i])); } free(filedlg.papszITypeList); for (i = 0; i < mFilters.Length(); i++) { nsMemory::Free(*(pmydata->papszIFilterList[i])); } free(pmydata->papszIFilterList); free(pmydata); } if (title) nsMemory::Free( title ); if (result) { PRInt16 returnOKorReplace = returnOK; nsresult rv; // Remember last used directory. nsCOMPtr<nsILocalFile> file(do_CreateInstance("@mozilla.org/file/local;1", &rv)); NS_ENSURE_SUCCESS(rv, rv); file->InitWithNativePath(mFile); nsCOMPtr<nsIFile> dir; if (NS_SUCCEEDED(file->GetParent(getter_AddRefs(dir)))) { nsCOMPtr<nsILocalFile> localDir(do_QueryInterface(dir)); if (localDir) { nsCAutoString newDir; localDir->GetNativePath(newDir); if(!newDir.IsEmpty()) PL_strncpyz(mLastUsedDirectory, newDir.get(), MAX_PATH+1); // Update mDisplayDirectory with this directory, also. // Some callers rely on this. if (!mDisplayDirectory) mDisplayDirectory = do_CreateInstance("@mozilla.org/file/local;1"); if (mDisplayDirectory) mDisplayDirectory->InitWithNativePath( nsDependentCString(mLastUsedDirectory) ); } } if (mMode == modeSave) { // Windows does not return resultReplace, // we must check if file already exists PRBool exists = PR_FALSE; file->Exists(&exists); if (exists) returnOKorReplace = returnReplace; } *retval = returnOKorReplace; } else { *retval = returnCancel; } return NS_OK; }
bool PixmapChannel::CacheChannelIcon(void) { if (icon.isEmpty()) return false; m_localIcon = icon; // Is icon local? if (QFile(icon).exists()) return true; QString localDirStr = QString("%1/channels").arg(GetConfDir()); QDir localDir(localDirStr); if (!localDir.exists() && !localDir.mkdir(localDirStr)) { VERBOSE(VB_IMPORTANT, QString("Icons directory is missing and could " "not be created: %1").arg(localDirStr)); icon.clear(); return false; } // Has it been saved to the local cache? m_localIcon = QString("%1/%2").arg(localDirStr) .arg(QFileInfo(icon).fileName()); if (QFile(m_localIcon).exists()) return true; // Get address of master backed QString url = gCoreContext->GetMasterHostPrefix(); if (url.length() < 1) { icon.clear(); return false; } url.append(icon); QUrl qurl = url; if (qurl.host().isEmpty()) { icon.clear(); return false; } RemoteFile *rf = new RemoteFile(url, false, false, 0); QByteArray data; bool ret = rf->SaveAs(data); delete rf; if (ret && data.size()) { QImage image; image.loadFromData(data); //if (image.loadFromData(data) && image.width() > 0 if (image.save(m_localIcon)) { VERBOSE(VB_GENERAL, QString("Caching channel icon %1").arg(m_localIcon)); return true; } else VERBOSE(VB_GENERAL, QString("Failed to save to %1").arg(m_localIcon)); } // if we get here then the icon is set in the db but couldn't be found // anywhere so maybe we should remove it from the DB? icon.clear(); return false; }
bool logData::setupFromXML() { // no log specified if (logFileXMLname.isEmpty()) { qDebug() << "XML filename not set"; return false; } // open XML for reading QFile xmlfile( logFileXMLname ); if( !xmlfile.open( QIODevice::ReadOnly ) ) { // could not open qDebug() << "Couldn't open XML file"; return false;} // setup XML reader QXmlStreamReader * reader = new QXmlStreamReader; reader->setDevice( &xmlfile ); // clear up columns.clear(); eventIndices.clear(); allLogged = false; min = Q_INFINITY; max = Q_INFINITY; // temp config data QString logFileName; // parse XML while (reader->readNextStartElement()) { if (reader->name() == "LogReport") { while (reader->readNextStartElement()) { if (reader->name() == "AnalogLog") { dataClass = ANALOGDATA; while (reader->readNextStartElement()) { if (reader->name() == "LogFile") { // store logfile name logFileName = reader->readElementText(); } else if (reader->name() == "LogFileType") { QString tempStr = reader->readElementText(); if (tempStr == "binary") { dataFormat = BINARY; } else if (tempStr == "csv") { dataFormat = CSVFormat; } else if (tempStr == "ssv") { dataFormat = SSVFormat; } else { // invalid file format qDebug() << "Invalid file format"; delete reader; return false; } } else if (reader->name() == "LogEndTime") { QString tempStr = reader->readElementText(); endTime = tempStr.toDouble(); } else if (reader->name() == "LogCol") { column newCol; if (reader->attributes().hasAttribute("index")) { newCol.index = reader->attributes().value("index").toString().toInt(); } else { // required attribute qDebug() << "Index attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("heading")) { newCol.heading = reader->attributes().value("heading").toString(); } else { // required attribute qDebug() << "Heading attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("dims")) { newCol.dims = reader->attributes().value("dims").toString(); } else { // required attribute qDebug() << "Dims attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("type")) { QString tempStr = reader->attributes().value("type").toString(); if (tempStr == "double") { newCol.type = TYPE_DOUBLE; } else if (tempStr == "float") { newCol.type = TYPE_FLOAT; } else if (tempStr == "int") { newCol.type = TYPE_INT32; } else if (tempStr == "longint") { newCol.type = TYPE_INT64; } else if (tempStr == "string") { newCol.type = TYPE_STRING; } else { // invalid data type qDebug() << "Wrong data type label"; delete reader; return false; } } else { // required attribute qDebug() << "Type attr missing"; delete reader; return false; } // as unclosed reader->readNextStartElement(); // add column columns.push_back(newCol); } else if (reader->name() == "LogAll") { allLogged = true; column newCol; int size; if (reader->attributes().hasAttribute("size")) { size = reader->attributes().value("size").toString().toInt(); } else { // required attribute qDebug() << "Size attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("headings")) { newCol.heading = reader->attributes().value("headings").toString(); } else { // required attribute qDebug() << "Headings attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("dims")) { newCol.dims = reader->attributes().value("dims").toString(); } else { // required attribute qDebug() << "Dims attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("type")) { QString tempStr = reader->attributes().value("type").toString(); if (tempStr == "double") { newCol.type = TYPE_DOUBLE; } else if (tempStr == "float") { newCol.type = TYPE_FLOAT; } else if (tempStr == "int") { newCol.type = TYPE_INT32; } else if (tempStr == "longint") { newCol.type = TYPE_INT64; } else if (tempStr == "string") { newCol.type = TYPE_STRING; } else { // invalid data type qDebug() << "Wrong data type name"; delete reader; return false; } } else { // required attribute qDebug() << "Type attr missing"; delete reader; return false; } // as unclosed reader->readNextStartElement(); // add columns columns.resize(size, newCol); // setup indices for (uint i = 0; i < columns.size(); ++i) columns[i].index = i; } else if (reader->name() == "TimeStep") { if (reader->attributes().hasAttribute("dt")) { timeStep = reader->attributes().value("dt").toString().toDouble(); } else { // required attribute qDebug() << "Timestep attr missing"; delete reader; return false; } } else { // XML tag not recognised qDebug() << "Unknown tag name " << reader->name(); delete reader; return false; } } } else if (reader->name() == "EventLog") { dataClass = EVENTDATA; while (reader->readNextStartElement()) { if (reader->name() == "LogFile") { // store logfile name logFileName = reader->readElementText(); } else if (reader->name() == "LogFileType") { QString tempStr = reader->readElementText(); if (tempStr == "binary") { dataFormat = BINARY; } else if (tempStr == "csv") { dataFormat = CSVFormat; } else if (tempStr == "ssv") { dataFormat = SSVFormat; } else { // invalid file format qDebug() << "File format unkown"; delete reader; return false; } } else if (reader->name() == "LogEndTime") { QString tempStr = reader->readElementText(); endTime = tempStr.toDouble(); } else if (reader->name() == "LogCol") { column newCol; // event port logs don't use the index newCol.index = -1; if (reader->attributes().hasAttribute("heading")) { newCol.heading = reader->attributes().value("heading").toString(); } else { // required attribute qDebug() << "Heading attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("dims")) { newCol.dims = reader->attributes().value("dims").toString(); } else { // required attribute qDebug() << "Dims attr missing"; delete reader; return false; } if (reader->attributes().hasAttribute("type")) { QString tempStr = reader->attributes().value("type").toString(); if (tempStr == "double") { newCol.type = TYPE_DOUBLE; } else if (tempStr == "float") { newCol.type = TYPE_FLOAT; } else if (tempStr == "int") { newCol.type = TYPE_INT32; } else if (tempStr == "longint") { newCol.type = TYPE_INT64; } else if (tempStr == "string") { newCol.type = TYPE_STRING; } else { // invalid data type qDebug() << "Data type unknown"; delete reader; return false; } } else { // required attribute qDebug() << "Type attr missing"; delete reader; return false; } // as unclosed reader->readNextStartElement(); // add column columns.push_back(newCol); } else if (reader->name() == "LogAll") { allLogged = true; int size; if (reader->attributes().hasAttribute("size")) { size = reader->attributes().value("size").toString().toInt(); } else { // required attribute qDebug() << "Size attr missing"; delete reader; return false; } // add indices for (int i = 0; i < size; ++i) eventIndices.push_back(i); // as unclosed reader->readNextStartElement(); } else if (reader->name() == "LogIndex") { eventIndices.push_back(reader->readElementText().toInt()); } else if (reader->name() == "LogPort") { eventPortName = reader->readElementText(); } else if (reader->name() == "TimeStep") { if (reader->attributes().hasAttribute("dt")) { timeStep = reader->attributes().value("dt").toString().toDouble(); } else { // required attribute qDebug() << "Timestep attr missing"; delete reader; return false; } } else { // XML tag not recognised qDebug() << "XML tag not recognised"; delete reader; return false; } } } else { // log type not recognised qDebug() << "Log type unknown"; delete reader; return false; } } } else { // not a LogReport qDebug() << "Not a logreport"; delete reader; return false; } } // load the log file // get local dir QString dirPath = logFileXMLname; dirPath.resize(dirPath.lastIndexOf(QDir::separator())); QDir localDir(dirPath); if (!logFile.isOpen()) { logFile.setFileName(localDir.absoluteFilePath(logFileName)); if( !logFile.open( QIODevice::ReadOnly ) ) { // could not open qDebug() << "Couldn't open log file " << localDir.absoluteFilePath(logFileName); delete reader; return false;} } // resize data carriers colData.resize(columns.size()); // log name logName = logFileName; // all successful! delete reader; return true; }
void PhysicalCamera::moveRelative(const opal::Vec3r& dir, opal::real dt) { // Construct the actual velocity vector. opal::Vec3r velocity = dir; if (!opal::areEqual(velocity.lengthSquared(), 0)) { velocity.normalize(); } velocity *= mTranslateSpeed; switch(mType) { case PHYSICAL: { assert(mSolid); // TODO: handle things differently if we're in midair. Ogre::Matrix4 camTransform; mOgreCamera->getParentSceneNode()->getWorldTransforms( &camTransform); Ogre::Vector3 localDir(velocity[0], velocity[1], velocity[2]); // Convert the local direction vector to a global direction // vector. Subtract out the camera's position. Ogre::Vector3 globalDir = camTransform * localDir; globalDir -= camTransform.getTrans(); opal::Vec3r opalVec(globalDir[0], globalDir[1], globalDir[2]); // Keep from flying. if (opalVec[1] > 0) { opalVec[1] = 0; } // Don't use the dt in this case; let Opal take care of the // velocity. mSolid->setGlobalLinearVel(opalVec); break; } case NON_CLIPPING: { Ogre::Vector3 posChange(velocity[0] * dt, velocity[1] * dt, velocity[2] * dt); mOgreCamera->getParentSceneNode()->translate(posChange, Ogre::Node::TS_LOCAL); break; } case NON_CLIPPING_ORBIT: { Ogre::Vector3 posChange(velocity[0] * dt, velocity[1] * dt, velocity[2] * dt); mOgreCamera->getParentSceneNode()->translate(posChange, Ogre::Node::TS_LOCAL); lookAt(mOrbitCenter); break; } default: assert(false); } }