예제 #1
0
void
QMacPasteboard::clear()
{
#ifdef DEBUG_PASTEBOARD
    qDebug("PasteBoard: clear!");
#endif
    clear_helper();
}
예제 #2
0
void
QMacPasteboard::setMimeData(QMimeData *mime_src)
{
    if (!paste)
        return;

    if (mime == mime_src || (!mime_src && mime && mac_mime_source))
        return;
    mac_mime_source = false;
    delete mime;
    mime = mime_src;

    QList<QMacPasteboardMime*> availableConverters = QMacPasteboardMime::all(mime_type);
    if (mime != 0) {
        clear_helper();
        QStringList formats = mime_src->formats();

#ifdef QT_MAC_USE_COCOA
        // QMimeData sub classes reimplementing the formats() might not expose the
        // temporary "application/x-qt-mime-type-name" mimetype. So check the existence
        // of this mime type while doing drag and drop.
        QString dummyMimeType(QLatin1String("application/x-qt-mime-type-name"));
        if (!formats.contains(dummyMimeType)) {
            QByteArray dummyType = mime_src->data(dummyMimeType);
            if (!dummyType.isEmpty()) {
                formats.append(dummyMimeType);
            }
        }
#endif
        for(int f = 0; f < formats.size(); ++f) {
            QString mimeType = formats.at(f);
            for (QList<QMacPasteboardMime *>::Iterator it = availableConverters.begin(); it != availableConverters.end(); ++it) {
                QMacPasteboardMime *c = (*it);
                QString flavor(c->flavorFor(mimeType));
                if(!flavor.isEmpty()) {
                    QVariant mimeData = static_cast<QMacMimeData*>(mime_src)->variantData(mimeType);
#if 0
                    //### Grrr, why didn't I put in a virtual int QMacPasteboardMime::count()? --Sam
                    const int numItems = c->convertFromMime(mimeType, mimeData, flavor).size();
#else
                    int numItems = 1; //this is a hack but it is much faster than allowing conversion above
                    if(c->convertorName() == QLatin1String("FileURL"))
                        numItems = mime_src->urls().count();
#endif
                    for(int item = 0; item < numItems; ++item) {
                        const int itemID = item+1; //id starts at 1
                        promises.append(QMacPasteboard::Promise(itemID, c, mimeType, mimeData, item));
                        PasteboardPutItemFlavor(paste, (PasteboardItemID)itemID, QCFString(flavor), 0, kPasteboardFlavorNoFlags);
#ifdef DEBUG_PASTEBOARD
                        qDebug(" -  adding %d %s [%s] <%s> [%d]",
                               itemID, qPrintable(mimeType), qPrintable(flavor), qPrintable(c->convertorName()), item);
#endif
                    }
                }
            }
        }
    }
}
예제 #3
0
void SpectraSet::read_xml(std::string file_name, bool with_spectra, bool with_full_spectra) {
  boost::unique_lock<boost::mutex> lock(mutex_);
  clear_helper();

  pugi::xml_document doc;

  if (!doc.load_file(file_name.c_str()))
    return;

  pugi::xml_node root = doc.child("QpxAcquisition");
  if (!root)
    return;

  run_info_.from_xml(root.child(run_info_.xml_element_name().c_str()));

  if (!with_spectra)
    return;

  if (root.child("Spectra")) {

    Spill fake_spill;
    fake_spill.run = run_info_;

    for (pugi::xml_node &child : root.child("Spectra").children()) {
      if (child.child("ChannelData") && !with_full_spectra)
        child.remove_child("ChannelData");

      Spectrum::Spectrum* new_spectrum
          = Spectrum::Factory::getInstance().create_from_xml(child);
      if (new_spectrum == nullptr)
        PL_INFO << "Could not parse spectrum";
      else {
        new_spectrum->addSpill(fake_spill);
        my_spectra_.push_back(new_spectrum);
      }
    }
  }

  changed_ = false;
  identity_ = file_name;

  ready_ = true;
  newdata_ = true;
  terminating_ = false;
  cond_.notify_one();
}
예제 #4
0
void SpectraSet::set_spectra(const XMLableDB<Spectrum::Template>& newdb) {
  boost::unique_lock<boost::mutex> lock(mutex_);  
  clear_helper();
  int numofspectra = newdb.size();

  for (int i=0; i < numofspectra; i++) {
    Spectrum::Spectrum* newSpectrum = Spectrum::Factory::getInstance().create_from_template(newdb.get(i));
    if (newSpectrum != nullptr) {
      my_spectra_.push_back(newSpectrum);
    }
  }

  changed_ = true;

  ready_ = true; terminating_ = false; newdata_ = false;
  cond_.notify_one();
}
예제 #5
0
void SpectraSet::clear() {
  boost::unique_lock<boost::mutex> lock(mutex_);
  clear_helper();
  cond_.notify_one();
}
예제 #6
0
SpectraSet::~SpectraSet() {
  terminate();
  clear_helper();
}