bool UIWizardCloneVD::copyVirtualDisk() { /* Gather attributes: */ CMedium sourceVirtualDisk = field("sourceVirtualDisk").value<CMedium>(); CMediumFormat mediumFormat = field("mediumFormat").value<CMediumFormat>(); qulonglong uVariant = field("mediumVariant").toULongLong(); QString strMediumPath = field("mediumPath").toString(); qulonglong uSize = field("mediumSize").toULongLong(); /* Check attributes: */ AssertReturn(!strMediumPath.isNull(), false); AssertReturn(uSize > 0, false); /* Get VBox object: */ CVirtualBox vbox = vboxGlobal().virtualBox(); /* Create new virtual hard-disk: */ CMedium virtualDisk = vbox.CreateHardDisk(mediumFormat.GetName(), strMediumPath); if (!vbox.isOk()) { msgCenter().cannotCreateHardDiskStorage(vbox, strMediumPath, this); return false; } /* Compose medium-variant: */ QVector<KMediumVariant> variants(sizeof(qulonglong)*8); for (int i = 0; i < variants.size(); ++i) { qulonglong temp = uVariant; temp &= 1<<i; variants[i] = (KMediumVariant)temp; } /* Copy existing virtual-disk to the new virtual-disk: */ CProgress progress = sourceVirtualDisk.CloneTo(virtualDisk, variants, CMedium()); if (!sourceVirtualDisk.isOk()) { msgCenter().cannotCreateHardDiskStorage(sourceVirtualDisk, strMediumPath, this); return false; } /* Show creation progress: */ msgCenter().showModalProgressDialog(progress, windowTitle(), ":/progress_media_create_90px.png", this); if (progress.GetCanceled()) return false; if (!progress.isOk() || progress.GetResultCode() != 0) { msgCenter().cannotCreateHardDiskStorage(progress, strMediumPath, this); return false; } /* Remember created virtual-disk: */ m_virtualDisk = virtualDisk; /* Just close the created medium, it is not necessary yet: */ m_virtualDisk.Close(); return true; }
bool UIWizardNewVD::createVirtualDisk() { /* Gather attributes: */ CMediumFormat mediumFormat = field("mediumFormat").value<CMediumFormat>(); qulonglong uVariant = field("mediumVariant").toULongLong(); QString strMediumPath = field("mediumPath").toString(); qulonglong uSize = field("mediumSize").toULongLong(); /* Check attributes: */ AssertReturn(!strMediumPath.isNull(), false); AssertReturn(uSize > 0, false); /* Get VBox object: */ CVirtualBox vbox = vboxGlobal().virtualBox(); /* Create new virtual hard-disk: */ CMedium virtualDisk = vbox.CreateMedium(mediumFormat.GetName(), strMediumPath, KAccessMode_ReadWrite, KDeviceType_HardDisk); if (!vbox.isOk()) { msgCenter().cannotCreateHardDiskStorage(vbox, strMediumPath, this); return false; } /* Compose medium-variant: */ QVector<KMediumVariant> variants(sizeof(qulonglong)*8); for (int i = 0; i < variants.size(); ++i) { qulonglong temp = uVariant; temp &= UINT64_C(1)<<i; variants[i] = (KMediumVariant)temp; } /* Create base storage for the new virtual-disk: */ CProgress progress = virtualDisk.CreateBaseStorage(uSize, variants); if (!virtualDisk.isOk()) { msgCenter().cannotCreateHardDiskStorage(virtualDisk, strMediumPath, this); return false; } /* Show creation progress: */ msgCenter().showModalProgressDialog(progress, windowTitle(), ":/progress_media_create_90px.png", this); if (progress.GetCanceled()) return false; if (!progress.isOk() || progress.GetResultCode() != 0) { msgCenter().cannotCreateHardDiskStorage(progress, strMediumPath, this); return false; } /* Remember created virtual-disk: */ m_virtualDisk = virtualDisk; /* Inform VBoxGlobal about it: */ vboxGlobal().createMedium(UIMedium(m_virtualDisk, UIMediumType_HardDisk, KMediumState_Created)); return true; }
static bool NPClass_Invoke(NPObject *npobj, NPIdentifier name, const NPVariant *args, uint32 argCount, NPVariant *result) { NPClass_Prolog; const QByteArray slotName = NPN_UTF8FromIdentifier(name); int slotIndex = publicMethodIndex(npobj, slotName, static_cast<int>(argCount)); if (slotIndex == -1) { NPN_SetException(npobj, QByteArray("No method '" + slotName + "' with " + QByteArray::number(argCount) + " parameters").constData()); return false; } const QMetaMethod slot = qobject->metaObject()->method(slotIndex); QList<QByteArray> parameterTypes = slot.parameterTypes(); if (parameterTypes.count() != static_cast<int>(argCount)) { NPN_SetException(npobj, QByteArray("Wrong parameter count for method " + slotName).constData()); return false; } QVariant returnVariant(QVariant::nameToType(slot.typeName()), (void*)0); QVector<QVariant> variants(parameterTypes.count()); // keep data alive QVector<const void*> metacallArgs(parameterTypes.count() + 1); // arguments for qt_metacall metacallArgs[0] = returnVariant.data(); // args[0] == return value for (int p = 0; p < parameterTypes.count(); ++p) { QVariant::Type type = QVariant::nameToType(parameterTypes.at(p)); if (type == QVariant::Invalid && parameterTypes.at(p) != "QVariant") { NPN_SetException(npobj, QString("Parameter %1 in method '%2' has invalid type") .arg(p).arg(QString::fromUtf8(slotName)).toAscii().constData()); return false; } QVariant qvar = args[p]; if (type != QVariant::Invalid && !qvar.convert(type)) { NPN_SetException(npobj, QString("Parameter %1 to method '%2' needs to be convertable to '%3'") .arg(p).arg(QString::fromUtf8(slotName)).arg(QString::fromAscii(parameterTypes.at(p))).toAscii().constData()); return false; } variants[p] = qvar; if (type == QVariant::Invalid) metacallArgs[p + 1] = &variants.at(p); else metacallArgs[p + 1] = variants.at(p).constData(); // must not detach! } qobject->qt_metacall(QMetaObject::InvokeMetaMethod, slotIndex, const_cast<void**>(metacallArgs.data())); if (returnVariant.isValid() && result) *result = NPVariant::fromQVariant(This, returnVariant); return true; }
static bool NPClass_Invoke(NPObject *npobj, NPIdentifier name, const NPVariant *args, uint32 argCount, NPVariant *result) { NPClass_Prolog; int slotIndex = publicMethodIndex(npobj, name); if (slotIndex == -1) { QByteArray qname = NPN_UTF8FromIdentifier(name); NPN_SetException(npobj, QByteArray("No such method " + qname).constData()); return false; } const QMetaMethod slot = qobject->metaObject()->method(slotIndex); QList<QByteArray> parameterTypes = slot.parameterTypes(); if (parameterTypes.count() != static_cast<int>(argCount)) { QByteArray qname = NPN_UTF8FromIdentifier(name); NPN_SetException(npobj, QByteArray("Wrong parameter count for method " + qname).constData()); return false; } QVariant returnVariant(QVariant::nameToType(slot.typeName()), (void *)0); QVector<QVariant> variants(parameterTypes.count()); // keep data alive QVector<const void *> metacallArgs(parameterTypes.count() + 1); // arguments for qt_metacall metacallArgs[0] = returnVariant.data(); // args[0] == return value for (int p = 0; p < parameterTypes.count(); ++p) { QVariant::Type type = QVariant::nameToType(parameterTypes.at(p)); if (type == QVariant::Invalid) { QByteArray qname = NPN_UTF8FromIdentifier(name); NPN_SetException(npobj, QByteArray("Unsupported parameter in method " + qname).constData()); return false; } QVariant qvar = args[p]; if (!qvar.convert(type)) { QByteArray qname = NPN_UTF8FromIdentifier(name); NPN_SetException(npobj, QByteArray("Unsupported parameter value in method " + qname).constData()); return false; } variants[p] = qvar; metacallArgs[p + 1] = variants.at(p).constData(); // must not detach! } qobject->qt_metacall(QMetaObject::InvokeMetaMethod, slotIndex, const_cast<void * *>(metacallArgs.data())); if (returnVariant.isValid() && result) *result = NPVariant::fromQVariant(This, returnVariant); return true; }
void cli::run() { while( !_run_complete.canceled() ) { try { std::string line; try { getline( _prompt.c_str(), line ); } catch ( const fc::eof_exception& e ) { break; } line += char(EOF); fc::variants args = fc::json::variants_from_string(line); if( args.size() == 0 ) continue; const string& method = args[0].get_string(); auto result = receive_call( 0, method, variants( args.begin()+1,args.end() ) ); auto itr = _result_formatters.find( method ); if( itr == _result_formatters.end() ) { std::cout << fc::json::to_pretty_string( result ) << "\n"; } else std::cout << itr->second( result, args ) << "\n"; } catch ( const fc::exception& e ) { std::cout << e.to_detail_string() << "\n"; if (e.code() == fc::canceled_exception_code) { break; } } } }