void PFSViewMainWin::setFrame( pfs::Frame *frame )
{
  QApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) );

  
  pfsView->setFrame( frame );

  lumRange->setHistogramImage(pfsView->getPrimaryChannel());

  updateChannelSelection();
  updateZoomValue();
  
  const char *luminanceTag = frame->getTags()->getString( "LUMINANCE" );
  if( luminanceTag != NULL && !strcmp( luminanceTag, "DISPLAY" ) ) {
    setLumMappingMethod(0);
    lumRange->lowDynamicRange();
  }
  
  updateRangeWindow();

  // Set the window caption to the name of the frame, if it is given
  const char *fileName = frame->getTags()->getString( "FILE_NAME" );
  QString qLuminance( "" );
  if( luminanceTag!=NULL )
    qLuminance=QString(" (") + QString(luminanceTag) + QString(")");
  if( fileName == NULL )
    setWindowTitle( QString( "pfsview" ) );
  else {
    QString qFileName( fileName );
    if( qFileName.length() > 30 )
      setWindowTitle( QString( "pfsview: ... " ) + QString( fileName ).right( 30 ) + qLuminance);
    else
      setWindowTitle( QString( "pfsview: " ) + QString( fileName ) + qLuminance);
  }
  updateMenuEnable( );


  QApplication::restoreOverrideCursor();  
}
Beispiel #2
0
bool mitk::QmitkIOUtil::SaveToFileWriter( mitk::FileWriterWithInformation::Pointer fileWriter, mitk::BaseData::Pointer data,   const std::string fileName )
{
    // Ensure a valid filename
    QString qFileName(QString::fromStdString(fileName));
    QString qProposedFileName(qFileName);
    if(qFileName.isEmpty())
    {
        qProposedFileName.append(fileWriter->GetDefaultFilename());
    }
    qProposedFileName.append(fileWriter->GetDefaultExtension());
    qFileName = GetFileNameWithQDialog("Save file", qProposedFileName,
                                       QString::fromAscii(fileWriter->GetFileDialogPattern()));
    //do nothing if the user presses cancel
    if ( qFileName.isEmpty() )
      return false;

    // Check if an extension exists already and if not, append the default extension
    if ( !qFileName.contains( QRegExp("\\.\\w+$") ) )
    {
        qFileName.append( fileWriter->GetDefaultExtension() );
    }
    else
    {
        std::string extension = itksys::SystemTools::GetFilenameLastExtension( qFileName.toLocal8Bit().constData() );
        if (!fileWriter->IsExtensionValid(extension))
        {
            return false;
        }
    }
    //Write only if a valid name was set
    if(qFileName.isEmpty() == false)
    {
        fileWriter->SetFileName( qFileName.toLocal8Bit().constData() );
        fileWriter->DoWrite( data );
    }

    return true;
}
Beispiel #3
0
bool FlpImport::tryZIPImport( trackContainer * _tc )
{
	// see if the file is a zip file
	closeFile();
	const QFile &thefile = file();

	int err = 0;
	struct zip *zfile = zip_open(qPrintable(thefile.fileName()), 0, &err);

	if( zfile == NULL )
	{
		if( err == ZIP_ER_NOZIP )
		{
			printf("flp import (zip): not a valid zip file\n");
		}
		else if( err == ZIP_ER_OPEN )
		{
			printf("flp import (zip): error opening file\n");
		}
		else if( err == ZIP_ER_READ || err == ZIP_ER_SEEK )
		{
			printf("flp import (zip): error reading file\n");
		}
		else
		{
			printf("flp import (zip): unknown error opening zip file\n");
		}
		return false;
	}
	// valid zip file
	// get temporary directory
	QString tmpName;
	
	{
		QTemporaryFile qtmp;
		if( qtmp.open() )
		{
			tmpName = qtmp.fileName();
		}
		else
		{
			zip_close(zfile);
			printf("flp import (zip): error getting temporary folder\n");
			return false;
		}
	}
	QDir tmpDir = QDir::temp();
	tmpDir.mkdir(tmpName);
	tmpDir.cd(tmpName);
	
	// unzip everything to the temp folder
	int buf_size = getpagesize();
	char buf[buf_size];
	int numFiles = zip_get_num_files(zfile);
	int i;
	bool foundFLP = false;
	QString flpFile = "";
	for( i=0; i<numFiles; ++i )
	{
		const char* fileName = zip_get_name(zfile, i, 0);
		if( fileName != NULL )
		{
			struct zip_file *unzipFile = zip_fopen_index(zfile, i, 0); 
			if( unzipFile != NULL )
			{
				// we have a handle to read, now get a handle to the outfile
				QFile out(tmpDir.absolutePath() + QDir::separator() + 
					fileName);
				out.open(QIODevice::WriteOnly);
				// ok we have handles on both, now do buffered writing
				bool readErr = false;
				while(true)
				{
					// read into buffer
					int numRead = zip_fread(unzipFile, buf, buf_size);
					if( numRead == -1 )
					{
						readErr = true;
						printf("flp import (zip): error while reading %s "
							"from zip file\n", fileName);
						break;
					}
					out.write( buf, numRead );
					if( numRead < buf_size ) break;
				}
				// we successfully read this file, check if it is 
				// the .flp file
				QString qFileName(fileName);
				if( qFileName.endsWith(".flp") )
				{
					foundFLP = true;
					flpFile = out.fileName();
				}

				// clean up
				out.close();
				zip_fclose(unzipFile);
			}
			else
			{
				printf("flp import (zip): unable to get %s out of %s\n",
					fileName, qPrintable(thefile.fileName()) );
			}
		}
	}
	zip_close(zfile);

	// make sure there was a .flp file in the archive	
	if( ! foundFLP )
	{
		printf("flp import (zip): no .flp file found in archive\n");
		return false;
	}

	// use the flp_import plugin to load the .flp file
	// which was extracted to the temp dir
	setFile(flpFile);
	m_fileBase = QFileInfo( flpFile ).path();
	return tryFLPImport( _tc );
}
Beispiel #4
0
void mitk::QmitkIOUtil::SaveBaseDataWithDialog(mitk::BaseData* data, std::string fileName, QWidget* parent)
{
    try
    {
        if (data != NULL)
        {
    /*        //########### Check if we can save as standard image type via itkImageWriter
            mitk::Image::Pointer image = dynamic_cast<mitk::Image*>(data);
            QString classname(data->GetNameOfClass());
            if ( image.IsNotNull() && (classname.compare("Image")==0 || classname.compare("SeedsImage")==0  ) )
            {
                SaveImageWithDialog(image, fileName, parent);
                return; //succes. we can return
            }
            //########### End Check if we can save as standard image type via itkImageWriter
*/
            //########### Check if we can save as standard pointset type via mitkPointSetWriter
            mitk::PointSet::Pointer pointset = dynamic_cast<mitk::PointSet*>(data);
            if(pointset.IsNotNull())
            {
                SavePointSetWithDialog(pointset, fileName, parent);
                return; //succes. we can return
            }
            //########### End Check if we can save as standard pointset type via mitkPointSetWriter

            //########### Check if we can save as standard surface type via mitkVtkSurfaceWriter
            mitk::Surface::Pointer surface = dynamic_cast<mitk::Surface*>(data);
            if(surface.IsNotNull())
            {
                SaveSurfaceWithDialog(surface, fileName, parent);
                return; //succes. we can return
            }
            //########### End Check if we can save as standard surface type via mitkVtkSurfaceWriter

            //########### None standard data type was found, try to save with extensions.
            // now try the file writers provided by the CoreObjectFactory

            mitk::CoreObjectFactory::FileWriterList fileWriters = mitk::CoreObjectFactory::GetInstance()->GetFileWriters();

            mitk::CoreObjectFactory::FileWriterList fileWriterCandidates;
            QString fileDialogPattern;
            for (mitk::CoreObjectFactory::FileWriterList::iterator it = fileWriters.begin() ; it != fileWriters.end() ; ++it)
            {
                if ( (*it)->CanWriteBaseDataType(data) )
                {
                  fileWriterCandidates.push_back(*it);
                  fileDialogPattern += QString::fromStdString((*it)->GetFileDialogPattern()) + ";;";
                }
            }

            if (!fileWriterCandidates.empty())
            {
              // remove last ';;' from pattern
              fileDialogPattern.remove( fileDialogPattern.size()-2, 2);

              // Ensure a valid filename
              QString qFileName(QString::fromStdString(fileName));
              QString qProposedFileName( qFileName );
              QString selectedFilter;
              if(qFileName.isEmpty())
              {
                  qProposedFileName.append(fileWriterCandidates.front()->GetDefaultFilename());
              }
              qProposedFileName.append(fileWriterCandidates.front()->GetDefaultExtension());
              qFileName = GetFileNameWithQDialog("Save file", qProposedFileName,
                                                 fileDialogPattern, &selectedFilter);
              //do nothing if the user presses cancel
              if ( qFileName.isEmpty() )
                return;

              std::string ext = itksys::SystemTools::GetFilenameLastExtension(qFileName.toStdString());
              QString extension = QString::fromStdString(ext);

              //QString extension = "."+QFileInfo(qFileName).completeSuffix();
              for (mitk::CoreObjectFactory::FileWriterList::iterator it = fileWriterCandidates.begin() ;
                   it != fileWriterCandidates.end() ; ++it)
              {
                if ((*it)->IsExtensionValid(extension.toStdString()))
                {
                  (*it)->SetFileName( qPrintable(qFileName) );
                  (*it)->DoWrite( data );
                  return;
                }
              }

              // if the image extension consists of two parts (e.g. *.nii.gz) we need to check again
              // with the two last extensions. This is to allow points within the image name.
              QString qFileNameCopy(qFileName);
              qFileNameCopy.remove(QString::fromStdString(ext));
              std::string ext2 = itksys::SystemTools::GetFilenameLastExtension(qFileNameCopy.toStdString());
              ext2.append(ext);
              extension = QString::fromStdString(ext2);
              for (mitk::CoreObjectFactory::FileWriterList::iterator it = fileWriterCandidates.begin() ;
                it != fileWriterCandidates.end() ; ++it)
              {
                if ((*it)->IsExtensionValid(extension.toStdString()))
                {
                  (*it)->SetFileName( qPrintable(qFileName) );
                  (*it)->DoWrite( data );
                  return;
                }
              }
              // returns earlier when successful
            }

            // no appropriate writer has been found
            QMessageBox::critical(parent,"ERROR","Could not find file writer for this data type");
            return;
        }
    }catch(itk::ExceptionObject e)
    {
        QMessageBox::critical( parent, "Exception during saving", e.GetDescription(),QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton);
    }
}