Esempio n. 1
0
void MarSystemControlView::recreate(Marsyas::MarSystem * system, QQmlComponent * delegate)
{
  foreach(QObject * item, m_items)
    delete item;
  m_items.clear();

  control_map_t controls = system->controls();
  control_map_t::iterator it;
  for (it = controls.begin(); it != controls.end(); ++it)
  {
    cout << "a control: " << it->first << endl;

    const MarControlPtr & control = it->second;

    QString name = QString::fromStdString( control->getName() );
    QVariant value;

    std::string type = control->getType();
    if (type == "mrs_real")
      value = QString::number( control->to<mrs_real>() );
    else if (type == "mrs_natural")
      value = QString::number( control->to<mrs_natural>() );
    else if (type == "mrs_bool")
      value = QVariant( control->to<mrs_bool>() ).convert(QVariant::String);
    else if (type == "mrs_string")
      value = QString::fromStdString(control->to<mrs_string>());
    else
      value = QString("<undefined>");

    //value.convert(QVariant::String);

    QQmlPropertyMap *data = new QQmlPropertyMap;
    data->insert("name",  name);
    data->insert("value", value);

    QQmlContext *context = new QQmlContext( delegate->creationContext() );
    context->setContextProperty("control", data);

    QObject * object = delegate->create(context);
    context->setParent(object);
    m_items.append(object);

    QQuickItem *item = qobject_cast<QQuickItem*>(object);
    if (!item)
      return;

    item->setParentItem( this->parentItem() );
  }
}
Esempio n. 2
0
WebPageActivationData WebPages::page(int tabId, int parentId)
{
    if (!m_webPageComponent) {
        qWarning() << "TabModel not initialized!";
        return WebPageActivationData(0, false);
    }

    if (m_activePage && m_activePage->webPage && m_activePage->webPage->tabId() == tabId) {
        m_activePage->webPage->resumeView();
        m_activePage->webPage->setVisible(true);
        return WebPageActivationData(m_activePage->webPage, false);
    }

#ifdef DEBUG_LOGS
    qDebug() << "about to create a new tab or activate old:" << tabId;
#endif

    WebPageEntry *pageEntry = m_activePages.value(tabId, 0);
    bool resurrect = pageEntry && !pageEntry->webPage;
    if (!pageEntry || resurrect) {
        QQmlContext *creationContext = m_webPageComponent->creationContext();
        QQmlContext *context = new QQmlContext(creationContext ? creationContext : QQmlEngine::contextForObject(m_webContainer));
        QObject *object = m_webPageComponent->beginCreate(context);
        if (object) {
            context->setParent(object);
            object->setParent(m_webContainer);
            DeclarativeWebPage *webPage = qobject_cast<DeclarativeWebPage *>(object);
            if (webPage) {
                webPage->setParentItem(m_webContainer);
                webPage->setParentID(parentId);
                webPage->setTabId(tabId);
                webPage->setContainer(m_webContainer);
                if (!pageEntry) {
                    pageEntry = new WebPageEntry(webPage, 0);
                } else {
                    pageEntry->webPage = webPage;
                }

                m_webPageComponent->completeCreate();
#ifdef DEBUG_LOGS
                qDebug() << "New view id:" << webPage->uniqueID() << "parentId:" << webPage->parentId() << "tab id:" << webPage->tabId();
#endif
                m_activePages.insert(tabId, pageEntry);
                ++m_count;
            } else {
                qmlInfo(m_webContainer) << "webPage component must be a WebPage component";
            }
        } else {
            qmlInfo(m_webContainer) << "Creation of the web page failed. Error: " << m_webPageComponent->errorString();
            delete object;
            object = 0;
        }
    }

    updateActivePage(pageEntry, resurrect);
#ifdef DEBUG_LOGS
    dumpPages();
#endif

    return WebPageActivationData(pageEntry->webPage, true);
}