Ejemplo n.º 1
0
ObjectPtr FilterFitDialog::createNewDataObject() {
    BasicPluginPtr dataObject = kst_cast<BasicPlugin>(DataObject::createPlugin(_filterFitTab->pluginName(), _document->objectStore(), _filterFitTab->configWidget()));
    Q_ASSERT(dataObject);

    if (!dataObject->isValid()) {
        _document->objectStore()->removeObject(dataObject);
        QString msg(tr("Unable to create Plugin Object using provided parameters.\n\n"));
        msg += dataObject->errorMessage();
        QMessageBox::warning(this, tr("Kst"), msg);

        return 0;
    }

    if(editMode()==New) {
        PlotItem *plotItem = 0;
        switch (_filterFitTab->curvePlacement()->place()) {
        case CurvePlacement::NoPlot:
            break;
        case CurvePlacement::ExistingPlot:
        {
            plotItem = static_cast<PlotItem*>(_filterFitTab->curvePlacement()->existingPlot());
            break;
        }
        case CurvePlacement::NewPlotNewTab:
            _document->createView();
        // fall through to case NewPlot.
        case CurvePlacement::NewPlot:
        {
            CreatePlotForCurve *cmd = new CreatePlotForCurve();
            cmd->createItem();

            plotItem = static_cast<PlotItem*>(cmd->item());
            if (_filterFitTab->curvePlacement()->scaleFonts()) {
                plotItem->view()->resetPlotFontSizes(plotItem);
                plotItem->view()->configurePlotFontDefaults(plotItem); // copy plots already in window
            }
            plotItem->view()->appendToLayout(_filterFitTab->curvePlacement()->layout(), plotItem,
                                             _filterFitTab->curvePlacement()->gridColumns());
            if (_filterFitTab->curvePlacement()->layout() == CurvePlacement::Custom) {
                plotItem->createCustomLayout(_filterFitTab->curvePlacement()->gridColumns());
            }
            break;
        }
        default:
            break;
        }

        if (plotItem) {
            CurvePtr curve = _document->objectStore()->createObject<Curve>();
            Q_ASSERT(curve);

            if (!_vectorX) {
                setVectorX(dataObject->inputVectors().value(dataObject->inputVectorList().first()));
            }
            Q_ASSERT(_vectorX);
            curve->setXVector(_vectorX);

            VectorPtr yVector = dataObject->outputVectors().value(dataObject->outputVectorList().first());
            Q_ASSERT(yVector);
            curve->setYVector(yVector);

            curve->setColor(_filterFitTab->curveAppearance()->color());
            curve->setHasPoints(_filterFitTab->curveAppearance()->showPoints());
            curve->setHasLines(_filterFitTab->curveAppearance()->showLines());
            curve->setHasBars(_filterFitTab->curveAppearance()->showBars());
            curve->setLineWidth(_filterFitTab->curveAppearance()->lineWidth());
            curve->setPointSize(_filterFitTab->curveAppearance()->pointSize());
            curve->setLineStyle(_filterFitTab->curveAppearance()->lineStyle());
            curve->setPointType(_filterFitTab->curveAppearance()->pointType());
            curve->setPointDensity(_filterFitTab->curveAppearance()->pointDensity());
            curve->setBarFillColor(_filterFitTab->curveAppearance()->barFillColor());

            curve->writeLock();
            curve->registerChange();
            curve->unlock();

            _filterFitTab->curveAppearance()->setWidgetDefaults();

            PlotRenderItem *renderItem = plotItem->renderItem(PlotRenderItem::Cartesian);
            renderItem->addRelation(kst_cast<Relation>(curve));

            dataObject->writeLock();
            dataObject->internalUpdate();
            dataObject->unlock();

            if (dataObject->hasParameterVector()) {
                CreateLabelCommand *cmd = new CreateLabelCommand;
                QString *tmpstring = new QString(dataObject->parameterVectorToString());

                cmd->createItem(tmpstring);
            }
            plotItem->update();

        }
    }

    _filterFitTab->configWidget()->save();

    return dataObject;
}