bool KstEqDialogI::editSingleObject(KstEquationPtr eqPtr) { eqPtr->writeLock(); if (!checkEntries()) { eqPtr->unlock(); return false; } // update the vector only if it is dirty KstVectorPtr vp; if (_xVectorsDirty) { KST::vectorList.lock().readLock(); /* find *V */ KstVectorList::Iterator i = KST::vectorList.findTag(_w->_xVectors->selectedVector()); if (i == KST::vectorList.end()) { kstdFatal() << "Bug in kst: the Vector field (Eq) " << "refers to a non existant vector..." << endl; } vp = *i; } else { vp = eqPtr->vX(); } KST::vectorList.lock().unlock(); // update the DoInterpolation only if it is dirty if (_doInterpolationDirty) { eqPtr->setExistingXVector(vp, _w->_doInterpolation->isChecked()); } else { eqPtr->setExistingXVector(vp, eqPtr->doInterp()); } if (_equationDirty) { eqPtr->setEquation(_w->_equation->text()); if (!eqPtr->isValid()) { QString parseErrors; for (QStringList::ConstIterator i = Equation::errorStack.begin(); i != Equation::errorStack.end(); ++i) { parseErrors += *i; parseErrors += "\n"; } KMessageBox::detailedSorry(this, i18n("There is an error in the equation you entered."), parseErrors); eqPtr->unlock(); return false; } } eqPtr->unlock(); return true; }
bool KstEqDialogI::newObject() { QString tag_name = _tagName->text(); QString etext = _w->_equation->text(); etext.remove(QRegExp("[^a-zA-Z0-9\\(\\)\\+\\-\\*/\\%\\^\\|\\&\\!<>=_.]")); if (etext.length() > 12) { etext.truncate(12); etext += "..."; } if (tag_name == defaultTag) { tag_name = KST::suggestEQName(etext); } /* verify that the curve name is unique */ if (KstData::self()->dataTagNameNotUnique(tag_name)) { _tagName->setFocus(); return false; } if (!checkEntries()) { return false; } KST::vectorList.lock().readLock(); /* find *V */ KstVectorPtr vp = *KST::vectorList.findTag(_w->_xVectors->selectedVector()); if (!vp) { kstdFatal() << "Bug in kst: the Vector field (Eq) " << "refers to a non-existent vector..." << endl; } KST::vectorList.lock().unlock(); /** Create the equation here */ vp->readLock(); KstEquationPtr eq = new KstEquation(tag_name, _w->_equation->text(), vp, _w->_doInterpolation->isChecked()); vp->unlock(); if (!eq->isValid()) { eq = 0L; QString parseErrors; for (QStringList::ConstIterator i = Equation::errorStack.begin(); i != Equation::errorStack.end(); ++i) { parseErrors += *i; parseErrors += "\n"; } KMessageBox::detailedSorry(this, i18n("There is an error in the equation you entered."), parseErrors); return false; } KstVCurvePtr vc = new KstVCurve(KST::suggestCurveName(tag_name, true), eq->vX(), eq->vY(), 0L, 0L, 0L, 0L, _w->_curveAppearance->color()); vc->setHasPoints(_w->_curveAppearance->showPoints()); vc->setHasLines(_w->_curveAppearance->showLines()); vc->setHasBars(_w->_curveAppearance->showBars()); vc->setLineWidth(_w->_curveAppearance->lineWidth()); vc->setLineStyle(_w->_curveAppearance->lineStyle()); vc->pointType = _w->_curveAppearance->pointType(); vc->setPointDensity(_w->_curveAppearance->pointDensity()); vc->setBarStyle(_w->_curveAppearance->barStyle()); QString legend_text = _legendText->text(); if (legend_text == defaultTag) { vc->setLegendText(QString("")); } else { vc->setLegendText(legend_text); } KstViewWindow *w = dynamic_cast<KstViewWindow*>(KstApp::inst()->findWindow(_w->_curvePlacement->_plotWindow->currentText())); if (!w) { QString n = KstApp::inst()->newWindow(KST::suggestWinName()); w = dynamic_cast<KstViewWindow*>(KstApp::inst()->findWindow(n)); } if (w) { Kst2DPlotPtr plot; if (_w->_curvePlacement->existingPlot()) { /* assign curve to plot */ plot = kst_cast<Kst2DPlot>(w->view()->findChild(_w->_curvePlacement->plotName())); if (plot) { plot->addCurve(vc.data()); } } if (_w->_curvePlacement->newPlot()) { /* assign curve to plot */ QString name = w->createObject<Kst2DPlot>(KST::suggestPlotName()); if (_w->_curvePlacement->reGrid()) { w->view()->cleanup(_w->_curvePlacement->columns()); } plot = kst_cast<Kst2DPlot>(w->view()->findChild(name)); if (plot) { _w->_curvePlacement->update(); _w->_curvePlacement->setCurrentPlot(plot->tagName()); plot->addCurve(vc.data()); plot->generateDefaultLabels(); } } } KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(eq.data()); KST::dataObjectList.append(vc.data()); KST::dataObjectList.lock().unlock(); eq = 0L; // drop the reference before we update vc = 0L; emit modified(); return true; }
bool KstEqDialog::editSingleObject(KstEquationPtr eqPtr) { KstVectorPtr vp; eqPtr->writeLock(); if (!checkEntries()) { eqPtr->unlock(); return false; } if (_xVectorsDirty) { KstVectorList::iterator i; KST::vectorList.lock().readLock(); i = KST::vectorList.findTag(_w->_xVectors->selectedVector()); if (i != KST::vectorList.end()) { vp = *i; } KST::vectorList.lock().unlock(); } else { vp = eqPtr->vX(); } // // update the _doInterpolation only if it is dirty... // if (_doInterpolationDirty) { eqPtr->setExistingXVector(vp, _w->_doInterpolation->isChecked()); } else { eqPtr->setExistingXVector(vp, eqPtr->doInterp()); } if (_equationDirty) { eqPtr->setEquation(_w->_equation->text()); if (!eqPtr->isValid()) { QStringList::const_iterator i; QString strWarning = QObject::tr("There is an error in the equation you entered.\n"); for (i = Equation::errorStack.begin(); i != Equation::errorStack.end(); ++i) { strWarning += *i; strWarning += "\n"; } QMessageBox::warning(this, QObject::tr("Kst"), strWarning); eqPtr->unlock(); return true; } eqPtr->setRecursed(false); if (eqPtr->recursion()) { eqPtr->setRecursed(true); eqPtr->unlock(); QMessageBox::critical(this, QObject::tr("Kst"), QObject::tr("There is a recursion resulting from the equation you entered.")); return false; } } eqPtr->unlock(); return true; }
bool KstIfaceImpl::plotEquation(const QString& xvector, const QString& equation, const QString& plotName, const QColor& color) { KstVectorPtr v; Kst2DPlotPtr plot; QString etag, ptag; KST::vectorList.lock().readLock(); KstVectorList::Iterator it = KST::vectorList.findTag(xvector); KST::vectorList.lock().unlock(); KstApp *app = KstApp::inst(); if (equation.isEmpty() || it == KST::vectorList.end()) { return false; } v = *it; etag = KST::suggestEQName(QString(equation).replace(QRegExp("[\\[\\]\\s]"), "_")); ptag = "P-" + plotName; if (!plotName.isEmpty()) { //find the plot, or P-plotName KMdiIterator<KMdiChildView*> *iter = app->createIterator(); bool found = false; while (iter->currentItem() && !found) { KMdiChildView *childview = iter->currentItem(); KstViewWindow *viewwindow = dynamic_cast<KstViewWindow*>(childview); if (viewwindow && !found) { Kst2DPlotList plotlist = viewwindow->view()->findChildrenType<Kst2DPlot>(false); Kst2DPlotList::Iterator plot_iter = plotlist.findTag(plotName); if (plot_iter != plotlist.end()) { plot = *plot_iter; found = true; } else { Kst2DPlotList::Iterator plot_iter = plotlist.findTag(ptag); if (plot_iter != plotlist.end()) { plot = *plot_iter; found = true; } } } iter->next(); } app->deleteIterator(iter); } //if the plot does not exist, create it if (!plot) { //put the plot in the active window KMdiChildView *activewin = app->activeWindow(); if (!activewin) { QString windowname = app->newWindow("W1"); activewin = app->findWindow(windowname); } KstViewWindow *viewwindow = dynamic_cast<KstViewWindow*>(activewin); if (viewwindow) { KstTopLevelViewPtr pTLV = viewwindow->view(); plot = pTLV->createObject<Kst2DPlot>(ptag); } } KstEquationPtr eq = new KstEquation(etag, equation, v, true); if (!eq->isValid()) { return false; } KstVCurveList vcurves = kstObjectSubList<KstBaseCurve,KstVCurve>(plot->Curves); KstVCurvePtr vc = new KstVCurve(KST::suggestCurveName(etag, true), eq->vX(), eq->vY(), 0L, 0L, 0L, 0L, color.isValid() ? color : KstColorSequence::next(vcurves,plot->backgroundColor())); KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(KstDataObjectPtr(eq)); KST::dataObjectList.append(KstDataObjectPtr(vc)); KST::dataObjectList.lock().unlock(); plot->addCurve(KstBaseCurvePtr(vc)); _doc->forceUpdate(); _doc->setModified(); return true; }
bool KstEqDialog::newObject() { QString tag_name = _tagName->text(); QString etext = _w->_equation->text(); etext.remove(QRegExp("[^a-zA-Z0-9\\(\\)\\+\\-\\*/\\%\\^\\|\\&\\!<>=_.]")); etext.replace(KstObjectTag::tagSeparator, KstObjectTag::tagSeparatorReplacement); if (etext.length() > 12) { etext.truncate(12); etext += "..."; } if (tag_name == defaultTag) { tag_name = KST::suggestEQName(etext); } if (KstData::self()->dataTagNameNotUnique(tag_name)) { _tagName->setFocus(); return false; } if (!checkEntries()) { return false; } KST::vectorList.lock().readLock(); KstVectorPtr vp = *KST::vectorList.findTag(_w->_xVectors->selectedVector()); if (vp) { KST::vectorList.lock().unlock(); KstEquationPtr eq; eq = new KstEquation(tag_name, _w->_equation->text(), vp, _w->_doInterpolation->isChecked()); if (!eq->isValid()) { QStringList::const_iterator i; QString strWarning = QObject::tr("There is an error in the equation you entered.\n"); eq = 0L; for (i = Equation::errorStack.begin(); i != Equation::errorStack.end(); ++i) { strWarning += *i; strWarning += "\n"; } QMessageBox::warning(this, QObject::tr("Kst"), strWarning); return false; } KstVCurvePtr vc; QColor color; // xxx color = KstApp::inst()->chooseColorDlg()->getColorForCurve(eq->vX(), eq->vY()); if (!color.isValid()) { color = _w->_curveAppearance->color(); } vc = new KstVCurve(KST::suggestCurveName(eq->tag(), true), eq->vX(), eq->vY(), KstVectorPtr(), KstVectorPtr(), KstVectorPtr(), KstVectorPtr(), color); vc->setHasPoints(_w->_curveAppearance->showPoints()); vc->setHasLines(_w->_curveAppearance->showLines()); vc->setHasBars(_w->_curveAppearance->showBars()); vc->setLineWidth(_w->_curveAppearance->lineWidth()); vc->setLineStyle(_w->_curveAppearance->lineStyle()); vc->setPointStyle(_w->_curveAppearance->pointType()); vc->setPointDensity(_w->_curveAppearance->pointDensity()); vc->setBarStyle(_w->_curveAppearance->barStyle()); QString legend_text = _legendText->text(); if (legend_text == defaultTag) { vc->setLegendText(QString("")); } else { vc->setLegendText(legend_text); } KstViewWindow *w; /* xxx w = dynamic_cast<KstViewWindow*>(KstApp::inst()->findWindow(_w->_curvePlacement->_plotWindow->currentText())); if (!w) { QString n = KstApp::inst()->newWindow(KST::suggestWinName()); w = dynamic_cast<KstViewWindow*>(KstApp::inst()->findWindow(n)); } */ if (w) { Kst2DPlotPtr plot; if (_w->_curvePlacement->existingPlot()) { plot = kst_cast<Kst2DPlot>(w->view()->findChild(_w->_curvePlacement->plotName())); if (plot) { plot->addCurve(vc); } } if (_w->_curvePlacement->newPlot()) { QString name = w->createPlot(KST::suggestPlotName()); if (_w->_curvePlacement->reGrid()) { w->view()->cleanup(_w->_curvePlacement->columns()); } plot = kst_cast<Kst2DPlot>(w->view()->findChild(name)); if (plot) { _w->_curvePlacement->update(); _w->_curvePlacement->setCurrentPlot(plot->tagName()); plot->addCurve(vc); plot->generateDefaultLabels(); } } } KST::dataObjectList.lock().writeLock(); KST::dataObjectList.append(eq); KST::dataObjectList.append(vc); KST::dataObjectList.lock().unlock(); // // drop the reference before we update... // eq = 0L; vc = 0L; emit modified(); } return true; }