Пример #1
0
/* ========================================================================== */
QVariant LispPlugin::read_from(QVariantList& tokenz) {
    if (tokenz.isEmpty())
        throw runtime_error("unexpected EOF while reading");

    QByteArray token = tokenz.takeFirst().toByteArray();
    if (token == "(") {
        //auto L = QVariant(QVariant::List);
        QVariantList L;
        while (tokenz[0] != ")")
            L.append(read_from(tokenz));
        tokenz.takeFirst(); // pop off )
        return L;
    } else if (token == ")") {
        throw std::runtime_error("enexcepted )");
    } else {
        bool successCast;

        auto i = token.toInt(&successCast);
        if (successCast) return i;

        auto d = token.toDouble(&successCast);
        if (successCast) return d;

        return QString(token);
    }
}
Пример #2
0
void TestConversions::testDMSToRad()
{
	QVariantList data;

	data << 0 << 0 << 0 << 0.;
	data << 30 << 0 << 0 << M_PI/6;
	data << 45 << 0 << 0 << M_PI/4;
	data << 60 << 0 << 0 << M_PI/3;
	data << 90 << 0 << 0 << M_PI/2;
	data << 120 << 0 << 0 << 2*M_PI/3;
	data << 180 << 0 << 0 << M_PI;
	data << 270 << 0 << 0 << 3*M_PI/2;
	data << 360 << 0 << 0 << 2*M_PI;
	data << 0 << 30 << 0 << M_PI/360;
	data << 0 << 45 << 0 << M_PI/240;
	data << 30 << 30 << 0 << 61*M_PI/360;
	data << 0 << 0 << 1 << M_PI/648000;
	data << 90 << 58 << 30 << 1213*M_PI/2400;
	data << 10 << 59 << 59 << 39599*M_PI/648000;

	while (data.count() >= 4)
	{
		int deg, min, sec;
		double rad;
		deg = data.takeFirst().toInt();
		min = data.takeFirst().toInt();
		sec = data.takeFirst().toInt();
		rad = data.takeFirst().toDouble();
		QVERIFY2(std::abs(StelUtils::dmsToRad(deg, min, sec)-rad)<=ERROR_LIMIT, qPrintable(QString("%1d%2m%3s=%4").arg(deg).arg(min).arg(sec).arg(rad)));
	}
}
Пример #3
0
void TestConversions::testHMSToRad()
{
	QVariantList data;

	data << 0 << 0 << 0 << 0.;
	data << 1 << 0 << 0 << M_PI/12;
	data << 6 << 0 << 0 << M_PI/2;
	data << 12 << 0 << 0 << M_PI;
	data << 15 << 0 << 0 << 5*M_PI/4;
	data << 0 << 15 << 0 << M_PI/720;
	data << 0 << 0 << 15 << M_PI/43200;
	data << 2 << 15 << 45 << 269*M_PI/1600;
	data << 20 << 0 << 0 << 5*M_PI/3;
	data << 24 << 0 << 0 << 2*M_PI;
	data << 0 << 59 << 0 << 59*M_PI/10800;
	data << 0 << 0 << 59 << 59*M_PI/648000;
	data << 0 << 59 << 59 << 3599*M_PI/648000;
	data << 3 << 59 << 59 << 165599*M_PI/648000;

	while (data.count() >= 4)
	{
		int h, m, s;
		double rad;
		h = data.takeFirst().toInt();
		m = data.takeFirst().toInt();
		s = data.takeFirst().toInt();
		rad = data.takeFirst().toDouble();		
		QVERIFY2(std::abs(StelUtils::hmsToRad(h, m, s)-rad)<=ERROR_LIMIT, qPrintable(QString("%1h%2m%3s=%4").arg(h).arg(m).arg(s).arg(rad)));
	}
}
Пример #4
0
bool ChangeLog::checkChanges(const QString &previousVersion, const QString &currentVersion)
{
    QVersionNumber previous = QVersionNumber::fromString(previousVersion);
    QVersionNumber current = QVersionNumber::fromString(currentVersion);
    if (current <= previous) {
        qCInfo(CHANGELOG_CATEGORY) << "Current version isn't newer, than previous"
                                   << previousVersion << currentVersion;
        return false;
    }

    QFileSelector fileSelector;
    fileSelector.setExtraSelectors(QStringList() << QLocale::system().uiLanguages().constFirst().split('-').constFirst());
    const QString path = fileSelector.select(":/changelogs/changelog.json");

    QFile file(path);
    if (!file.open(QIODevice::ReadOnly)) {
        qCCritical(CHANGELOG_CATEGORY) << "Fail to open changelog file" << path << file.errorString();
        return false;
    }
    QByteArray data = file.readAll();

    QJsonParseError parseError;
    QJsonDocument document = QJsonDocument::fromJson(data, &parseError);
    if (parseError.error != QJsonParseError::NoError) {
        qCritical(CHANGELOG_CATEGORY) << "Fail to parse changelog data JSON:"
                                      << data << "error at offset"
                                      << parseError.offset
                                      << parseError.errorString() << parseError.error;
        return false;
    }
    QVariantList content = document.array().toVariantList();

    while (!content.isEmpty()) {
        if (QVersionNumber::fromString(content.constFirst().toMap().value("version").toString()) > current) {
            content.takeFirst();
        } else {
            break;
        }
    }
    QVariantList result;
    while (!content.isEmpty()) {
        if (QVersionNumber::fromString(content.constFirst().toMap().value("version").toString()) > previous) {
            result.append(content.takeFirst());
        } else {
            break;
        }
    }

    if (result.isEmpty()) {
        qCWarning(CHANGELOG_CATEGORY) << "Empty changelog" << previousVersion << currentVersion;
        return false;
    }

    emit changesAvailable(result);

    return true;
}
void QJnextMainLoop::set(QObject *object, QVariantList& args,
		QByteArray* retval) {
	QByteArray property = args.takeFirst().toByteArray();

	const QMetaObject * meta = object->metaObject();
	int propertyIndex = meta->indexOfProperty(property);
	if (propertyIndex < 0) {
		retval->append("No such property " + property);
		return;
	}

	QMetaProperty metaprop = meta->property(propertyIndex);
	if (!metaprop.isWritable()) {
		retval->append("Property " + property + " is not writable");
		return;
	}
	QVariant vValue = args.takeFirst();

	/* handle enum inputs as text */
	if (metaprop.isEnumType()) {
		int id;
		const QMetaEnum &enumerator = metaprop.enumerator();
		QByteArray keys;
		for (int i = 0; i < enumerator.keyCount(); ++i)
			keys += enumerator.key(i) + QByteArray(" ");
#ifdef DEBUG_QJnextMainLoop
		qDebug() << "[QJnextMainLoop]\tEnumerator" << enumerator.isFlag() << enumerator.scope() << enumerator.name() <<
		keys;
#endif

		if (enumerator.isFlag())
			id = enumerator.keyToValue(vValue.toByteArray().constData());
		else
			id = enumerator.keysToValue(vValue.toByteArray().constData());

		if (id != -1)
			vValue = QVariant(id);
	}
#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\tSET" << meta->className() << property << vValue
	<< vValue.canConvert(metaprop.type());
#endif

	if (!vValue.convert(metaprop.type())) {
		retval->append(
				"Unable to convert \"" + vValue.toByteArray() + "\" to "
						+ metaprop.typeName());
		return;
	}

	if (!metaprop.write(object, vValue))
		retval->append(
				QByteArray("Unable to set property ") + meta->className() + "."
						+ property + " to " + vValue.toByteArray());
	else
		*retval = QByteArray();
}
Пример #6
0
void TestDeltaT::testDeltaTByMorrisonStephenson1982WideDates()
{
	// test data from Mathematical Astronomical Morsels, p. 8. [ISBN 0-943396-51-4]
	QVariantList data;
	data <<    0 << 177; 
	data <<  100 << 158; 
	data <<  200 << 140;
	data <<  300 << 123;
	data <<  400 << 107;
	data <<  500 <<  93;
	data <<  600 <<  79;
	data <<  700 <<  66;
	data <<  800 <<  55;
	data <<  900 <<  45;
	data << 1000 <<  35;
	data << 1100 <<  27;
	data << 1200 <<  20;
	data << 1300 <<  14;
	data << 1400 <<   9;
	data << 1500 <<   5;
	data << 1600 <<   2;
	data << 1700 <<   0;
	data << 1800 <<   0;
	data << 1980 <<   1;
	data << 2075 <<   4;
	data << 2200 <<   8;
	data << 2300 <<  13;
	data << 2400 <<  19;
	data << 2500 <<  26;
	data << 2600 <<  34;
	data << 2700 <<  43;
	data << 2800 <<  53;
	data << 2900 <<  64;
	data << 3000 <<  76;

	while(data.count() >= 2)
	{
		// 30 seconds accuracy
		int year = data.takeFirst().toInt();
		int yout, mout, dout;
		double JD;
		double expectedResult = data.takeFirst().toDouble();
		StelUtils::getJDFromDate(&JD, year, 1, 1, 0, 0, 0);
		double result = StelUtils::getDeltaTByMorrisonStephenson1982(JD)/60.0;
		StelUtils::getDateFromJulianDay(JD, &yout, &mout, &dout);
		QVERIFY2(qRound(result) <= expectedResult, QString("date=%2 year=%3 result=%4 expected=%5")
							.arg(QString("%1-%2-%3 00:00:00").arg(yout).arg(mout).arg(dout))
							.arg(year)
							.arg(result)
							.arg(expectedResult)
							.toUtf8());
	}
}
Пример #7
0
void TestConversions::testRadToDMS()
{
	QVariantList data;

	data << 0. << 0 << 0 << 0.;
	data << M_PI/6 << 30 << 0 << 0.;
	data << M_PI/4 << 45 << 0 << 0.;
	data << M_PI/3 << 60 << 0 << 0.;
	data << M_PI/2 << 90 << 0 << 0.;
	data << 2*M_PI/3 << 120 << 0 << 0.;
	data << M_PI << 180 << 0 << 0.;
	data << 3*M_PI/2 << 270 << 0 << 0.;
	data << M_PI/360 << 0 << 30 << 0.;
	data << M_PI/240 << 0 << 45 << 0.;
	data << 61*M_PI/360 << 30 << 30 << 0.;
	data << M_PI/648000 << 0 << 0 << 1.;
	data << 1213*M_PI/2400 << 90 << 58 << 30.;
	data << 39599*M_PI/648000 << 10 << 59 << 59.;
	data << -M_PI/36 << -5 << 0 << 0.;
	data << -7*M_PI/8 << -157 << 30 << 0.;
	data << -2*M_PI/5 << -72 << 0 << 0.;
	data << -M_PI << -180 << 0 << 0.;
	data << -10*M_PI/648 << -2 << 46 << 40.0;

	while (data.count()>=4)
	{
		double rad, sec, seco, angle1, angle2;
		int deg, min;
		unsigned int dego, mino;
		bool sign;
		QString s;
		rad = data.takeFirst().toDouble();
		deg = data.takeFirst().toInt();
		min = data.takeFirst().toInt();
		sec = data.takeFirst().toDouble();
		if (deg>=0)
			angle1 = sec+min*60+deg*3600;
		else
			angle1 = -1*(sec+min*60+std::abs(deg)*3600);
		StelUtils::radToDms(rad, sign, dego, mino, seco);
		angle2 = seco+mino*60+dego*3600;
		if (!sign)
		{
			angle2 = -1*angle2;
			s = "-";
		}
		else
			s = "+";
		QVERIFY2(std::abs(angle1-angle2)<=ERROR_LIMIT, qPrintable(QString("%1rad=%2%3d%4m%5s").arg(rad).arg(s).arg(dego).arg(mino).arg(seco)));
	}
}
void QJnextMainLoop::connect(QObject *object, uint id, QVariantList& args,
		QByteArray *retval) {
	QByteArray methodName = args.takeFirst().toByteArray();
	QByteArray sid = args.takeFirst().toByteArray();
	int argCount = -1;

	const QMetaObject* meta = object->metaObject();
	QMetaMethod method;
	for (int i = 0; i < meta->methodCount(); ++i) {
		method = meta->method(i);
		if (QByteArray(method.signature()).startsWith(methodName + "(")) {
			QList<QByteArray> types = method.parameterTypes();
			if (types.size() > argCount) {
				// TODO : always pick enum types
				argCount = method.parameterTypes().size();
				break;
			}
		}
	}
	if (argCount == -1) {
		*retval = "No signal named " + methodName + " found";
		return;
	}
#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\tSIGNAL.connect" << methodName << id << sid;
#endif

	QJnextUserData * jnextData = dynamic_cast<QJnextUserData*>(object->userData(
			QJnextMainLoop::userDataId));
	if (jnextData == NULL) {
		*retval = "Unable to retrieve jnextData from object "
				+ QByteArray::number(id);
		return;
	}

	SignalHandler *& handler = jnextData->signalHandlers[sid];
	if (handler != NULL) {
#ifdef DEBUG_QJnextMainLoop
		qDebug() << "[QJnextMainLoop]\tCONNECTED (chained)";
#endif
		return;
	}
	handler = new SignalHandler(this, object, id, "com.blackberry.qt" + sid, meta, method);
	if (!handler->isValid()) {
		*retval = "QMetaObject::connect returned false. Unable to connect";
		return;
	}
#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\tCONNECTED";
#endif
}
void QJnextMainLoop::listNamespace(QVariantList& args, QByteArray* retval) {
	QByteArray param = args.takeFirst().toByteArray();
	QByteArray ns(param);
	QByteArray ver = QtBridge::takeLastParam(ns, "@");
	if (ver.size() == 0)
		ver = "1.0";

	QDeclarativeComponent component(declarativeEngine, this);

	component.setData(
			"import " + ns + " " + ver + "; import QtQuick 1.0; QtObject {}",
			QUrl());
	if (component.isError() || !component.isReady()) {
		qWarning() << "COMPONENT ERROR" << component.errorString();
	}

	QList<QDeclarativeType*> types = QDeclarativeMetaType::qmlTypes();
	QSet<QString> typeNames;
	foreach(QDeclarativeType* type, types)
	{
#ifdef DEBUG_QJnextMainLoop
		qDebug() << "[QJnextMainLoop]\t" << type->qmlTypeName() << type->majorVersion()
				<< type->minorVersion();
#endif

		if (ns == type->module() && type->isCreatable()) {
			QString qmlType = QString::fromLatin1(type->qmlTypeName());
			typeNames << qmlType.split("/").takeLast();
		}
	}
Пример #10
0
/* ========================================================================== */
QVariant LispPlugin::exec(QVariant procName, QVariant _exps) {
    QVariant result;
    assert(isa(_exps, "StringList"));
    QVariantList exps = _exps.toList();
    if ("*" == procName) {
        auto a = exps[0].toDouble();
        auto b = exps[1].toDouble();
        return a * b;
    } else if ("+" == procName) {
        auto a = exps[0].toDouble();
        auto b = exps[1].toDouble();
        return a + b;
    }  else if ("-" == procName) {
        auto a = exps[0].toDouble();
        auto b = exps[1].toDouble();
        return a - b;
    } else if ("<=" == procName) {
        auto a = exps[0].toDouble();
        auto b = exps[1].toDouble();
        return a <= b;
    } else {
        if (exps.size() == 1)
            _exps = exps.takeFirst();
        return CallExternal(procName.toByteArray(), _exps);
    }


    throw runtime_error(
                QString("Unable to resolve symbol: %1 in this context")
                .arg(procName.toString()).toStdString());
}
void QJnextMainLoop::get(QObject *object, QVariantList& args,
		QByteArray* retval) {
	QByteArray property = args.takeFirst().toByteArray();

	const QMetaObject * meta = object->metaObject();
	int propertyIndex = meta->indexOfProperty(property);
	if (propertyIndex < 0) {
		retval->append("No such property " + property);
		return;
	}

	QMetaProperty metaprop = meta->property(propertyIndex);
	if (!metaprop.isReadable()) {
		retval->append("Property " + property + " is not readable");
		return;
	}

	QVariant value = metaprop.read(object);
	if (value.isNull()) {
		qWarning() << "[QJnextMainLoop]\tNULL value ignored" << object->property(property);
	}
#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\tVALUE" << value << object->property(property) << metaprop.isEnumType();
#endif

    if (metaprop.isEnumType()) {
        bool ok;
        int enumValue = value.toInt(&ok);
        if (!ok) {
            int status = -1;
            void *argv[] = { 0, &value, &status };
            QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::ReadProperty,
                    propertyIndex + meta->propertyOffset(), argv);
            const int * enumRaw = static_cast<const int *>(argv[0]);

            if (status == -1 && enumRaw != 0) {
                const QMetaEnum & iEnum = metaprop.enumerator();
                if (iEnum.isFlag())
                    value = iEnum.valueToKeys(*enumRaw);
                else
                    value = iEnum.valueToKey(*enumRaw);
            } else {
                // someone is evil and didn't register enumerations properly
                qDebug() << "[QJnextMainLoop]\t" << "!!!!!!!" << argv[0] << value;
            }
        } else if (metaprop.enumerator().isFlag()) {
            *retval = metaprop.enumerator().valueToKeys(enumValue);
            return;
        } else {
            *retval = metaprop.enumerator().valueToKey(enumValue);
            return;
        }
    }
	*retval = value.toByteArray();
}
Пример #12
0
void Decision::setWriteIns(QVariantList newWriteIns)
{
    if (newWriteIns == writeIns())
        return;

    auto writeInList = m_decision.initWriteIns(newWriteIns.size());
    for (::UnsignedContest::Contestant::Builder writeInBuilder : writeInList) {
        auto writeIn = newWriteIns.takeFirst().toMap();
        writeInBuilder.setName(writeIn["name"].toString().toStdString());
        writeInBuilder.setDescription(writeIn["description"].toString().toStdString());
    }

    emit writeInsChanged();
}
Пример #13
0
void TestConversions::testRadToHMS()
{
	QVariantList data;

	data << 0. << 0 << 0 << 0.;
	data << M_PI/36 << 0 << 19 << 59.9;
	data << 7*M_PI/8 << 10 << 30 << 0.;
	data << 2*M_PI/5 << 4 << 48 << 0.;

	while (data.count()>=4)
	{
		double rad, s, so, t1, t2;
		int h, m;
		unsigned int ho, mo;
		rad = data.takeFirst().toDouble();
		h = data.takeFirst().toInt();
		m = data.takeFirst().toInt();
		s = data.takeFirst().toDouble();
		t1 = s+m*60+h*3600;
		StelUtils::radToHms(rad, ho, mo, so);
		t2 = so+mo*60+ho*3600;
		QVERIFY2(std::abs(t1-t2)<=0.1, qPrintable(QString("%1rad=%2h%3m%4s").arg(rad).arg(ho).arg(mo).arg(so)));
	}
}
Пример #14
0
bool ApplicationsMenuApplet::init(QWidget* parent)
{
  if(m_settings.type() == QVariant::List)
  {
    QVariantList list = m_settings.value<QVariantList>();

    while(!list.isEmpty())
    {
      const char** names = reinterpret_cast<const char**>(list.takeFirst().value<void*>());

      QMenu* menu = m_menu->addMenu(g_menu_names.value(names[0]));
      menu->setIcon(QIcon::fromTheme(names[1]).pixmap(menu->height(),menu->height()));
      m_menus.insert(g_menu_names.value(names[0]), menu);
    }

    QStringList categories;
    for(QList<DesktopEntryObject*>::iterator pos = m_entries.begin(); pos != m_entries.end(); ++pos)
    {
      if(m_menus.contains((*pos)->Category()))
        m_menus[(*pos)->Category()]->addAction((*pos)->Action());
      else
        m_menus["Other"]->addAction((*pos)->Action());
/*
      categories = (*pos)->Categories();
      for(QStringList::iterator pos2 = categories.begin(); pos2 != categories.end(); ++pos2)
        if(m_menus.contains(*pos2))
          m_menus[*pos2]->addAction((*pos)->Action());
*/
    }
  }

  m_menu->addSeparator();
  m_menu->addAction(QIcon::fromTheme("application-exit"), "Quit", qApp, SLOT(quit()));

/*
  connect(DesktopApplications::instance(), SIGNAL(applicationUpdated(const DesktopApplication&)), this, SLOT(onApplicationUpdated(const DesktopApplication&)));
  connect(DesktopApplications::instance(), SIGNAL(applicationRemoved(const QString&)), this, SLOT(onApplicationRemoved(const QString&)));

  QList<DesktopApplication> apps = DesktopApplications::instance()->applications();
  foreach(const DesktopApplication& app, apps)
    onApplicationUpdated(app);
*/

  return true;
}
QSqlQuery DatabaseConnection::PQuery(QString queryStr, QVariantList args)
{
    if(!m_db.isOpen())
        throw std::runtime_error("Database : Tentative de requete sur une connexion non ouverte : " + queryStr.toStdString()
                                 + " : "  + m_db.lastError().text().toLatin1().constData());

    QSqlQuery query(m_db);
    query.prepare(queryStr);

    while (!args.isEmpty())
        query.addBindValue(args.takeFirst());

    if(!query.exec())
        throw std::runtime_error("Database : Erreur lors de l'execution de \"" + queryStr.toStdString() + "\" : "
                                 + query.lastError().text().toLatin1().data());

    return query;
}
void QJnextMainLoop::call(QObject *object, QVariantList& args,
		QByteArray* retval) {
	QByteArray methodName = args.takeFirst().toByteArray();

	QList<QMetaMethod> methods = matchMetamethod(object, methodName, args,
			retval);
	if (methods.size() == 0)
		return;

	for (int i = 0; i < methods.size(); ++i) {
		if (doCall(object, &(methods[i]), args, retval) != -1)
			return;
	}

	*retval = "No method with matching parameters for " + methodName + " ";
	foreach (QVariant var, args)
		retval->append(var.toByteArray() + " ");
	retval->remove(retval->size() - 1, 1);
}
Пример #17
0
void OpenCachingComModel::parseFile( const QByteArray& file )
{
    QScriptEngine engine;

    // Qt requires parentheses around json code
    QScriptValue data = engine.evaluate( '(' + QString::fromUtf8( file ) + ')' );
    QVariantList caches = data.toVariant().toList();

//     qDebug()<<"parsing "<<caches.size()<<" items";
    QList<AbstractDataPluginItem*> items;
    while (!caches.isEmpty())
    {
        QVariantMap map = caches.takeFirst().toMap();
        if ( !findItem( map["oxcode"].toString() ) )
        {
            items << new OpenCachingComItem( map, this );
        }
    }
    addItemsToList(items);
}
Пример #18
0
void SoundCloud::checkUrlIsValid() {
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(this->sender());

    if (!reply) {
        emit urlChecked(false);
        return;
    }

    QUrl redirect = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();

    if (!redirect.isEmpty()) {
        this->checkUrl(redirect);
    }
    else {
        QString response(reply->readAll());
        QVariantMap result = Json::parse(response).toMap();

        if (!result.isEmpty()) {
            QVariantList tracks = result.value("tracks").toList();

            if (!tracks.isEmpty()) {
                while (!tracks.isEmpty()) {
                    QVariantMap track = tracks.takeFirst().toMap();
                    QUrl url(track.value("permalink_url").toString());
                    QString title = track.value("title").toString().trimmed();
                    emit urlChecked((url.isValid()) && (!title.isEmpty()), url, this->serviceName(), title + ".mp3", tracks.isEmpty());
                }
            }
            else {
                QUrl url(result.value("permalink_url").toString());
                QString title = result.value("title").toString().trimmed();
                emit urlChecked((url.isValid()) && (!title.isEmpty()), url, this->serviceName(), title + ".mp3");
            }
        }
        else {
            emit urlChecked(false);
        }
    }

    reply->deleteLater();
}
void QJnextMainLoop::createObjectFromDocument(QVariantList& args,
		QByteArray* result) {
	QByteArray uri = args.takeFirst().toByteArray();

	Q_UNUSED(result);

	QDeclarativeComponent * component = new QDeclarativeComponent(
			declarativeEngine, uri);
	if (component->isLoading()) {
		*result = "Unimplemented: Network components";
		qWarning() << *result;
		return;

		// TODO: support loading qml documents from the network
		/*QObject::connect(component,
		 SIGNAL(statusChanged(QDeclarativeComponent::Status)), this,
		 SLOT(continueLoadingComponent()));*/
	}

	continueLoadingComponent(component, result);
}
Пример #20
0
void StateOp::fromVariant(QVariant v)
{
    QVariantList list = v.toList();
    if (list.length() > 1){
        m_action = list.takeFirst().toString();
        /* assume well formatted from here because im lazy */
        if (m_action == "AddFile" || m_action == "ModifyFile"){
            m_filePath = list.takeFirst().toString();
            m_size = list.takeFirst().toLongLong();
            m_modifiedAt = QDateTime::fromString(list.takeFirst().toString(), Qt::ISODate);
            m_fingerPrint = list.takeFirst().toString();
        }else if(m_action == "RemoveFile"){
            m_filePath = list.takeFirst().toString();
        }else if(m_action == "RenameFile"){
            m_filePath = list.takeFirst().toString();
            m_newFilePath = list.takeFirst().toString();
        }else{
            qDebug() << "unrecognised state op action in StateOp::fromList";
        }
    }else{
        qWarning() << "invalid qvariant list for stateop";
    }
}
void QJnextMainLoop::disconnect(QObject *object, uint id, QVariantList& args,
		QByteArray *retval) {
	QByteArray sid = args.takeFirst().toByteArray();
	if (sid.size() == 0) {
		*retval = QByteArray("You must specify a signal id");
		return;
	}
	QJnextUserData * jnextData = dynamic_cast<QJnextUserData*>(object->userData(
			QJnextMainLoop::userDataId));
	if (jnextData == NULL) {
		*retval = "Unable to retrieve jnextData from object " + id;
		return;
	}

	SignalHandler *& handler = jnextData->signalHandlers[sid];
	if (handler == NULL) {
		qWarning() << "No known connection to " + sid;
		*retval = "No know connection to " + sid;
		return;
	}
	signalHandlers.remove(sid);
	handler->unref();
}
Пример #22
0
QWidget *UnseenEpisodeWidget::_makeWidget()
{
    if (_serie["unseen"].toList().isEmpty()) {
        _currentId = -1;
        return 0; // TODO DO IT RIGHT !!!
    }

    QVariantList unseenEpisodes = _serie["unseen"].toList();
    QVariantMap episode = unseenEpisodes.takeFirst().toMap();
    _serie["unseen"] = unseenEpisodes;
    QString episodeTitle = episode["title"].toString();
    QString episodeCode  = episode["code"].toString();
    _currentId = episode["id"].toDouble();

    QWidget *widget = new QWidget(this);
    QHBoxLayout *layout = new QHBoxLayout;
    layout->setContentsMargins(5, 5, 5, 5);
    QLabel *episodeLabel = new QLabel(widget);
    episodeLabel->setWordWrap(true);
    episodeLabel->setText(_serie["title"].toString() + " - " +
            episodeCode + " - " +
            episodeTitle);

    layout->addWidget(episodeLabel);

    MarkAsButton *button = new MarkAsButton(_currentId, widget);
    connect(button, SIGNAL(episodeSeenClicked(uint)),
            _api, SLOT(postEpisodesWatched(uint)));

    layout->addWidget(button);

    layout->setStretch(0, 1);
    widget->setLayout(layout);
    widget->setEnabled(false);
    return widget;
}
Пример #23
0
void TestDeltaT::testDeltaTByEspenakMeeus()
{
	// test data from http://eclipse.gsfc.nasa.gov/SEcat5/deltat.html#tab1
	QVariantList data;

	data << -500  << 17190 << 430;
	data << -400  << 15530 << 390;
	data << -300  << 14080 << 360;
	data << -200  << 12790 << 330;
	data << -100  << 11640 << 290;
	data << 0     << 10580 << 260;
	data << 100   << 9600  << 240;
	data << 200   << 8640  << 210;
	data << 300   << 7680  << 180;
	data << 400   << 6700  << 160;
	data << 500   << 5710  << 140;
	data << 600   << 4740  << 120;
	data << 700   << 3810  << 100;
	data << 800   << 2960  << 80;
	data << 900   << 2200  << 70;
	data << 1000  << 1570  << 55;
	data << 1100  << 1090  << 40;
	data << 1200  << 740   << 30;
	data << 1300  << 490   << 20;
	data << 1400  << 320   << 20;
	data << 1500  << 200   << 20;
	data << 1600  << 120   << 20;
	data << 1700  << 9     << 5;
	data << 1750  << 13    << 2;
	data << 1800  << 14    << 1;
	data << 1850  << 7     << 1;
	data << 1900  << -3    << 1;
	data << 1950  << 29    << 0.1;
	data << 1955  << 31.1  << 0.1;
	data << 1960  << 33.2  << 0.1;
	data << 1965  << 35.7  << 0.1;
	data << 1970  << 40.2  << 0.1;
	data << 1975  << 45.5  << 0.1;
	data << 1980  << 50.5  << 0.1;
	data << 1985  << 54.3  << 0.1;
	data << 1990  << 56.9  << 0.1;
	data << 1995  << 60.8  << 0.1;
	data << 2000  << 63.8  << 0.1;
	data << 2005  << 64.7  << 0.1;

	while(data.count() >= 3) 
	{
		int year = data.takeFirst().toInt();				
		int yout, mout, dout;
		double JD;
		double expectedResult = data.takeFirst().toDouble();
		double acceptableError = data.takeFirst().toDouble();		
		StelUtils::getJDFromDate(&JD, year, 1, 1, 0, 0, 0);
		double result = StelUtils::getDeltaTByEspenakMeeus(JD);
		double actualError = qAbs(qAbs(expectedResult) - qAbs(result));
		StelUtils::getDateFromJulianDay(JD, &yout, &mout, &dout);
		QVERIFY2(actualError <= acceptableError, QString("date=%2 year=%3 result=%4 expected=%5 error=%6 acceptable=%7")
							.arg(QString("%1-%2-%3 00:00:00").arg(yout).arg(mout).arg(dout))
							.arg(year)
							.arg(result)
							.arg(expectedResult)
							.arg(actualError)
							.arg(acceptableError)
							.toUtf8());
	}
}
Пример #24
0
/* ========================================================================== */
QVariant LispPlugin::eval(QVariant x, Env& env = global_env) {
    QVariant result(QVariant::List);
    Env localEnv = Env::Env(&env);

    QVariant firstToken;
    if (x.canConvert(QVariant::List)) {
        if (x.toList().size() != 0)
            firstToken = x.toList()[0];
        else
            return QVariantList();
    }

    if (isa(x, QVariant::String)) {
        QString symbolName = x.toString();
        auto someEnv = env.findvar(symbolName);
        if (someEnv == NULL)
            throw runtime_error(
                    QString("Unable to resolve symbol: %1 in this context")
                    .arg(symbolName).toStdString());
        result = someEnv->value(symbolName);
    }
    else if (isa(x, QVariant::UserType)) {
        if (isa(x, "Lambda")) {
            Lambda l = x.value<Lambda>();
            result = l.exec(x.toList(), localEnv);
        } else {
            return x;
        }
    }
    else if (!isa(x, QVariant::List)) {
        result = x;
    }
    else if ("quote" == firstToken) { // (quote exp)
        QVariant exp(QVariant::String);
        load(x, exp);
        result = exp;
    }
    else if ("if" == firstToken) { // (if test conseq alt)
        QVariant test, conseq, alt;
        load(x, test, conseq, alt);
        test = eval(test, localEnv);
        auto bTest = test.toBool();
        result = eval(bTest ? conseq : alt, localEnv);
    }
    else if ("define" == firstToken) { // (define var exp)
        QVariant var, exp;
        load(x, var, exp);
        env[var.toString()] = eval(exp, localEnv);
    }
    else if ("set!" == firstToken) { // (set! var exp)
        QVariant var, exp;
        load(x, var, exp);
        auto symbolName = var.toString();
        auto someEnv = env.findvar(symbolName);
        if (someEnv == NULL)
            env[symbolName] = eval(exp, localEnv);
        else
            (*someEnv)[symbolName] = eval(exp, localEnv);
    }
    else if ("begin" == firstToken) { // (begin exp ...)
        auto list = x.toList();
        QListIterator<QVariant> it(list);
        it.next();
        while (it.hasNext())
            result = eval(it.next(), localEnv);
    }
    else if ("lambda" == firstToken) {
        auto args = x.toList();
        result = QVariant::fromValue(Lambda(this, args[1], args[2]));
    }
    else { // (proc exp)
        QVariantList exps = x.toList();
        auto proc = exps.takeFirst();
        auto fname = proc.toString();

        for(int i = 0; i != exps.size(); ++i) {
            exps[i] = eval(exps[i], localEnv);
        }

        auto lambdaEnv = env.findvar(fname);
        if (lambdaEnv == NULL)
            result = exec(proc, exps);
        else {
            auto lambdaVar = (*lambdaEnv)[fname];
            if (!isa(lambdaVar, QVariant::UserType))
                throw runtime_error(
                        QString("Unable to resolve function: %1 in this context")
                        .arg(fname).toStdString());
            auto lambda = lambdaVar.value<Lambda>();
            result = lambda.exec(exps, localEnv);
        }
    }

    return result;
}
void QJnextMainLoop::createObject(QVariantList& args, QByteArray* result) {
	uint id = idBase++;
	// this will OWN the backing char array
	QByteArray param = args.takeFirst().toByteArray();
	QByteArray ns(param);
	QByteArray ver = QtBridge::takeLastParam(ns, "@");
	if (ver.size() == 0)
		ver = "1.0";
	QByteArray cls = QtBridge::takeLastParam(ns, ".");
	QString qmlcls = QString(ns) + "/" + cls;

	QObject *& object = objects[id];
	if (object != NULL) {
		*result = "Error object already exists for id" + QByteArray::number(id);
		qWarning() << *result;
		return;
	}

#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\tQDeclarative" << "import " + ns + " " + ver + "; " + cls + " {}";
#endif
	QDeclarativeComponent component(declarativeEngine, this);

	component.setData(
			"import " + ns + " " + ver + "; import QtQuick 1.0; QtObject {}",
			QUrl());
	if (component.isError() || !component.isReady()) {
		qWarning() << "COMPONENT ERROR" << component.errorString();
	}

	int majorVersion = -1, minorVersion = -1;
	QDeclarativeType * dtype = NULL;
	QString scls = cls;

	QList<QDeclarativeType*> types = QDeclarativeMetaType::qmlTypes();
	foreach(QDeclarativeType* type, types)
	{
		if (ns == type->module()) {
			QString qmlType = QString::fromLatin1(type->qmlTypeName());

			if (qmlcls.compare(qmlType, Qt::CaseInsensitive) == 0) {
				if (type->majorVersion() > majorVersion
						&& type->minorVersion() > minorVersion) {
					majorVersion = type->majorVersion();
					minorVersion = type->minorVersion();
					dtype = type;
				}
			}
		}
	}
	if (dtype == NULL && ns == "bb" && cls == "Application") {
		object = bb::Application::instance();
		object->setUserData(userDataId, new QJnextUserData(id));
		goto end_createObject;
	}
	if (dtype == NULL) {
		*result = "No such Type " + cls + " in namespace " + ns;
		qWarning() << *result;
		return;
	} else if (!dtype->isCreatable()) {
		*result = "Class " + ns + "." + cls + " is not creatable: "
				+ dtype->noCreationReason().toLatin1();
		qWarning() << *result;
		return;
	}

#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\t" << dtype->typeId() << dtype->typeName()
			<< QString("%1.%2").arg(QString::number(dtype->majorVersion())).arg(
					QString::number(dtype->minorVersion()));
#endif
	object = dtype->create();
	if (!object) {
		qWarning() << "COMPONENT.CREATE ERROR";
		*result = "Error creating component";
		return;
	}
	object->setUserData(userDataId, new QJnextUserData(id));
	object->setParent(this);

end_createObject:
	*result = QByteArray::number(id);
#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\tCreated object" << id;
#endif
}
Пример #26
0
void TestDeltaT::testDeltaTByChaprontMeeus()
{
	// test data from Astronomical Algorithms, 2ed., p. 79.
	QVariantList data;
	data << 1620 << 121.0;
	data << 1630 <<  82.0;
	data << 1640 <<  60.0;
	data << 1650 <<  46.0;
	data << 1660 <<  35.0;
	data << 1670 <<  24.0;
	data << 1680 <<  14.0;
	data << 1690 <<   8.0;
	data << 1700 <<   7.0;
	data << 1710 <<   9.0;
	data << 1720 <<  10.0;
	data << 1730 <<  10.0;
	data << 1740 <<  11.0;
	data << 1750 <<  12.0;
	data << 1760 <<  14.0;
	data << 1770 <<  15.0;
	data << 1780 <<  16.0;
	data << 1790 <<  16.0;
	data << 1800 <<  13.1;
	data << 1810 <<  12.0;
	data << 1820 <<  11.6;
	data << 1830 <<   7.1;
	data << 1840 <<   5.4;
	data << 1850 <<   6.8;
	data << 1860 <<   7.7;
	data << 1870 <<   1.4;
	data << 1880 <<  -5.5;
	data << 1890 <<  -6.0;
	data << 1900 <<  -2.8;
	data << 1910 <<  10.4;
	data << 1920 <<  21.1;
	data << 1930 <<  24.4;
	data << 1940 <<  24.3;
	data << 1950 <<  29.1;
	data << 1960 <<  33.1;
	data << 1970 <<  40.2;
	data << 1980 <<  50.5;
	data << 1984 <<  53.8; // *
	data << 1988 <<  55.8; // *
	data << 1990 <<  56.9;
	data << 1992 <<  58.3; // *
	data << 1996 <<  61.6; // *
	data << 1998 <<  63.0;
	
	// test data marked as * taken Mathematical Astronomical Morsels III, p. 8. [ISBN 0-943396-81-6]
	

	// accuracy 0.9 seconds for years range 1800-1997
	while(data.count() >= 2)
	{
		int year = data.takeFirst().toInt();
		int yout, mout, dout;
		double JD;
		double expectedResult = data.takeFirst().toDouble();
		double acceptableError = 0.9; // 0.9 seconds
		StelUtils::getJDFromDate(&JD, year, 1, 1, 0, 0, 0);
		double result = StelUtils::getDeltaTByChaprontMeeus(JD);
		double actualError = qAbs(qAbs(expectedResult) - qAbs(result));
		StelUtils::getDateFromJulianDay(JD, &yout, &mout, &dout);
		QVERIFY2(actualError <= acceptableError, QString("date=%2 year=%3 result=%4 expected=%5 error=%6 acceptable=%7")
							.arg(QString("%1-%2-%3 00:00:00").arg(yout).arg(mout).arg(dout))
							.arg(year)
							.arg(result)
							.arg(expectedResult)
							.arg(actualError)
							.arg(acceptableError)
							.toUtf8());
	}
}
void QJnextMainLoop::introspect(QObject *object, QVariantList& args,
		QByteArray* retval) {
	const QMetaObject * meta = object->metaObject();

	QVariantMap data;
	QVariantList properties;
	for (int i = 0; i < meta->propertyCount(); ++i) {
		QVariantMap propData;
		QMetaProperty prop = meta->property(i);

		propData["name"] = prop.name();
		propData["type"] = prop.typeName();
		if (!prop.isReadable()) {
			if (!prop.isWritable())
				continue;
			propData["writeOnly"] = true;
		}
		if (!prop.isWritable())
			propData["readOnly"] = true;
		if (prop.hasNotifySignal())
			propData["notifySignal"] = getMethodName(prop.notifySignal());
		if (prop.isEnumType())
			propData["enumeration"] = true;

		properties.append(QVariant::fromValue(propData));
	}
	data["properties"] = properties;

	QVariantList methods;
	QVariantList sigs;
	for (int i = 0; i < meta->methodCount(); ++i) {
		QVariantMap methodData;
		QMetaMethod method = meta->method(i);

		QByteArray name = getMethodName(method);
		if (method.access() == QMetaMethod::Private || name.startsWith("_") || name == "deleteLater" || name == "destroyed"
				|| name == "creationCompleted")
			continue;
		else if (method.access() == QMetaMethod::Protected && method.methodType() != QMetaMethod::Signal)
		    continue;
		methodData["name"] = name;

		QByteArray rType(method.typeName());
		if (!rType.isEmpty())
			methodData["type"] = rType;

		QList<QByteArray> pTypes = method.parameterTypes();
		QList<QByteArray> pNames = method.parameterNames();

		QVariantList params;
		for (int i = 0; i < pTypes.count(); ++i) {
			QVariantMap tp;
			tp["type"] = pTypes.at(i);
			tp["name"] = pNames.value(i);
			params.append(tp);
		}
		if (params.size() > 0)
			methodData["parameters"] = params;

		switch (method.methodType()) {
		case QMetaMethod::Method:
			//qDebug() << "=== METHOD ===" << methodData << method.signature();
			methods.append(QVariant::fromValue(methodData));
			break;
		case QMetaMethod::Signal:
			sigs.append(QVariant::fromValue(methodData));
			break;
		case QMetaMethod::Constructor:
			methodData["constructor"] = true;
			methods.append(QVariant::fromValue(methodData));
			break;
		case QMetaMethod::Slot:
			methods.append(QVariant::fromValue(methodData));
			break;
		}

	}
	if (methods.size() > 0)
		data["methods"] = methods;
	if (sigs.size() > 0)
		data["signals"] = sigs;

	data["id"] = args.takeFirst();

	bridge->json()->saveToBuffer(QVariant::fromValue(data), retval);
#ifdef DEBUG_QJnextMainLoop
	qDebug() << "[QJnextMainLoop]\t[INTROSPECT]" << retval;
#endif
}