Example #1
0
QMimeData *    ScriptModel::mimeData(const QModelIndexList& indexes) const
{
    if (indexes.size() == 2) // both columns
    {
        int pos = indexToPosition(indexes.at(0));

        std::ostringstream oss;

        const LogEntry& entry = m_entries.at(pos);

        OperationDescriptor_ptr reflective =
            entry.reflective;

        core::holder holder = reflective->get_holder(entry.req);

        json::write(oss, reflective, holder);

        QMimeData *mimeData = new QMimeData;
        mimeData->setText(oss.str().c_str());

        return mimeData;
    }

    return NULL;
}
Example #2
0
void SenderImpl::process()
{
    OperationDescriptor_ptr op = m_config->operation();

    Holder srcHolder = op->get_holder(m_request);

    // preFunc
    m_evaluator.pre(m_request);
    if (m_evaluator.hasError()) throw m_evaluator.error();

    // processors
    typedef QList< RequestProcessor_ptr > processors_t;
    const processors_t& processors = m_config->processors();

    for (processors_t::const_iterator it = processors.begin();
            it != processors.end(); ++it)
    {
        applyProcessor(m_request, *it, srcHolder);
    }

    // postFunc
    m_evaluator.post(m_request);
    if (m_evaluator.hasError()) throw m_evaluator.error();

    // Clone request
    // We can't emit a request we're going to modify
    Request_ptr request = op->create_request();
    Holder dstHolder = op->get_holder(request);

    op->copy(srcHolder, dstHolder);

    // emit request
    emit sendRequest(request);
    m_config->notifyRequestSent(request);
}
Example #3
0
void ScriptModel::append(corbasim::core::request_ptr req,
        int pos)
{
    LogEntry entry;
    entry.dateTime = QDateTime::currentDateTime();

    OperationDescriptor_ptr op =
        m_instance->get_reflective_by_tag(req->get_tag());

    if (!op) return;

    entry.reflective = op;

    beginInsertRows(QModelIndex(), pos, pos);

    core::holder hold = op->get_holder(req);
    Node_ptr node(new Node(op, hold));
    m_nodes.insert(pos, node);

    // List
    entry.req = req;
    entry.text = QString("Outgoing call ") + op->get_name();
    entry.icon = &m_outputIcon;

    // Background Color
    entry.color = QColor(Qt::yellow);

    m_entries.insert(pos, entry);

    endInsertRows();
}
Example #4
0
void AbstractInputTool::deleteAbstractInputItem(const QString& id, 
        InterfaceDescriptor_ptr reflective,
        const QList< int >& path)
{
    OperationDescriptor_ptr op =
        reflective->get_reflective_by_index(path.front());

    const key_t key(id, op->get_tag());
    QList< AbstractInputItem * >& list = m_map[key];

    for (int i = 0; i < list.size(); i++) 
    {
        AbstractInputItem * item = list[i];
        if (item->getPath() == path)
        {
            list.removeAt(i);
            m_inverse_map.erase(item);

            // Notify to the processor
            item->reset();

            m_group->deleteItem(
                    qobject_cast< qt::SortableGroupItem * >
                        (item->parent()));

            delete item;
            break;
        }
    }
}
Example #5
0
AbstractInputItem * AbstractInputTool::createAbstractInputItem(const QString& id, 
        InterfaceDescriptor_ptr reflective,
        const QList< int >& path)
{
    Objref_ptr objref = m_instances.find(id);

    OperationDescriptor_ptr op =
        reflective->get_reflective_by_index(path.front());

    AbstractInputItem * item = NULL;

    if (op && objref)
    {
        const key_t key(id, op->get_tag());
        QList< AbstractInputItem * >& list = m_map[key];

        for (int i = 0; i < list.size(); i++) 
        {
            if (list.at(i)->getPath() == path)
            {
                return NULL;
            }
        }
        
        item = createItem(objref, op, path);
        list.push_back(item);
        m_inverse_map[item] = key;

        qt::SortableGroupItem * sitem = 
            new qt::SortableGroupItem(item, m_group);

        sitem->showDetails();

        const QString title(getFieldName(op, path));
        sitem->setTitle(id + "." + title);

        m_group->appendItem(sitem);

        // connect with the processor
        QObject * inputRequestController = 
            Application::currentApplication()->inputRequestController();
        connect(item, 
                SIGNAL(addProcessor(RequestProcessor_ptr)),
                inputRequestController,
                SLOT(addProcessor(RequestProcessor_ptr)));
        connect(item, 
                SIGNAL(removeProcessor(RequestProcessor_ptr)),
                inputRequestController,
                SLOT(removeProcessor(RequestProcessor_ptr)));

        item->start();
    }

    return item;
}
Example #6
0
void FilterModel::load(const QVariant& settings)
{
    const QVariantList list = settings.toList();

    for (QVariantList::const_iterator it = list.begin(); 
            it != list.end(); ++it) 
    {
        const QVariantMap map = it->toMap();

        if (!map.contains("instance") || !map.contains("operations"))
            continue;

        // Name to ID conversion
        const QString instance = map["instance"].toString();

        if (instance.isEmpty()) continue;

        Objref_ptr objref = m_instances.find(instance);

        if (!objref) continue;

        FirstLevelItems_t::iterator fit =  m_items.find(objref->id());

        if (fit == m_items.end()) continue;

        // End Name to ID conversion
        
        const QVariantMap operations = map["operations"].toMap();

        for (unsigned int j = 0; 
                j < objref->interface()->operation_count(); j++) 
        {
            OperationDescriptor_ptr op = 
                objref->interface()->get_reflective_by_index(j);
            tag_t tag = op->get_tag();

            OperationsMap_t::iterator opit = 
                fit.value().operations.find(tag);

            if(operations.contains(op->get_name()) && 
                    opit != fit.value().operations.end())
            {
                bool state = operations[op->get_name()].toBool();

                opit.value()->setCheckState((state)?
                        Qt::Checked: Qt::Unchecked);
            }
        }
    }
}
Example #7
0
void SenderImpl::start(Sender_weak weak)
{
    Sender_ptr ptr (weak.lock());

    if (!ptr)
        return;

    m_evaluator.evaluate(m_config->code());

    bool hasErr = m_evaluator.hasError();

    if (!hasErr)
    {
        OperationDescriptor_ptr op = m_config->operation();

        // Clone the original request
        // We can't modify an emited request
        Holder srcHolder = op->get_holder(m_config->request());

        m_request = op->create_request();
        Holder dstHolder = op->get_holder(m_request);

        op->copy(srcHolder, dstHolder);

        // m_request is the working request
        m_evaluator.init(m_request);

        hasErr = m_evaluator.hasError();
    }

    if (!hasErr)
    {
        m_timer.expires_from_now(
                boost::posix_time::milliseconds(
                    m_config->initDelay()));

        m_timer.async_wait(
                boost::bind(&SenderImpl::handleTimeout,
                    this, weak, _1));
    }
    else
    {
        m_config->notifyFinished();

        emit finished(m_config);

        emit error(m_evaluator.error());
    }
}
Example #8
0
void FilterModel::registerInstance(Objref_ptr objref)
{
    m_instances.add(objref);

    FirstLevelItem item;
    item.objref = objref;
    FirstLevelItems_t::iterator it = 
        m_items.insert(objref->id(), item);
    
    OperationsMap_t& operations = it.value().operations;

    QStandardItem * ifItem = new QStandardItem(objref->name());
    ifItem->setEditable(false);
    ifItem->setCheckable(true);
    ifItem->setTristate(true);
    ifItem->setCheckState(Qt::Checked);
    item.item = ifItem;

    const unsigned int count = objref->interface()->operation_count();

    for (unsigned int i = 0; i < count; i++) 
    {
        OperationDescriptor_ptr op =
            objref->interface()->get_reflective_by_index(i);

        QStandardItem * opItem = new QStandardItem(op->get_name());
        opItem->setEditable(false);
        opItem->setCheckable(true);
        opItem->setCheckState(Qt::Checked);

        ifItem->appendRow(opItem);

        operations.insert(op->get_tag(), opItem);
    }

    appendRow(ifItem);
    
    emit filterChanged();
}
Example #9
0
void FilterModel::save(QVariant& settings)
{
    QVariantList list;

    for (FirstLevelItems_t::iterator it = m_items.begin(); 
            it != m_items.end(); ++it) 
    {
        Objref_ptr objref = it.value().objref;

        QVariantMap map;

        map["instance"] = objref->name();

        QVariantMap ops;

        for (unsigned int j = 0; 
                j < objref->interface()->operation_count(); j++) 
        {
            OperationDescriptor_ptr op = 
                objref->interface()->get_reflective_by_index(j);
            tag_t tag = op->get_tag();

            OperationsMap_t::const_iterator opit = 
                it.value().operations.find(tag);

            if (opit != it.value().operations.end())
            {
                ops[op->get_name()] = 
                    (opit.value()->checkState() == Qt::Checked);
            }
        }

        map["operations"] = ops;

        list << map;
    }

    settings = list;
}
Example #10
0
corbasim::gui::RequestDialog * SimpleClient::getRequestDialog(int idx)
{
    RequestDialog * dlg = m_dialogs[idx];

    if (!dlg)
    {
        OperationDescriptor_ptr op =
            m_objref->interface()->get_reflective_by_index(idx);
        const char * name = op->get_name();

        dlg = new RequestDialog(op, this);
        dlg->setWindowTitle(name);

        connect(dlg,
            SIGNAL(sendRequest(Request_ptr)),
            this,
            SIGNAL(sendRequest(Request_ptr)));

        m_dialogs[idx] = dlg;
    }

    return dlg;
}
Example #11
0
void SimpleClient::initialize(Objref_ptr objref)
{
    m_objref = objref;

    // Signals
    connect(this, SIGNAL(sendRequest(Request_ptr)),
            m_objref.get(), SLOT(sendRequest(Request_ptr)));

    m_log_model.registerInstance(m_objref);

    connect(m_objref.get(),
            SIGNAL(requestSent(ObjectId, const Request_ptr&, const Event_ptr&)),
            &m_log_model,
            SLOT(outputRequest(ObjectId, Request_ptr, Event_ptr)));

    m_filteredLog->registerInstance(m_objref);

    if (m_seqTool)
        m_seqTool->registerInstance(m_objref);

    QGridLayout * grid = NULL;
    InterfaceDescriptor_ptr factory = m_objref->interface();
    const unsigned int count = factory->operation_count();

    // Inicializa los dialogos a nulo
    m_dialogs.resize(count, NULL);

    for (unsigned int i = 0; i < count; i++)
    {
        const unsigned int idx = i % _max_btns_per_page;

        OperationDescriptor_ptr op =
            factory->get_reflective_by_index(i);

        const char * name = op->get_name();

        if (!idx)
        {
            QWidget * w = new QWidget;
            grid = new QGridLayout;
            w->setLayout(grid);

            // TODO Page + number or from... to...
            QString page("From ");
            page += name;
            m_tab->addTab(w, page);
        }

        // Button
        QPushButton * btn = new QPushButton(name);
        grid->addWidget(btn, idx / _max_btns_per_row,
            idx % _max_btns_per_row);

        m_buttons.addButton(btn, i);

        // Menu Operations
        QAction * act = m_operations_menu->addAction(name);
        m_actions.addAction(act);
        act->setData(i);
    }

    // Validator for reference updates
    m_ref->setObjref(m_objref);
}