bool KstIfaceImpl::setPlotAxes(const QString& plotName, int XLower, int XUpper, int YLower, int YUpper) { //find the plot KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *iter = app->createIterator(); while (iter->currentItem()) { KMdiChildView *childview = iter->currentItem(); KstViewWindow *viewwindow = dynamic_cast<KstViewWindow*>(childview); if (viewwindow) { Kst2DPlotList plotlist = viewwindow->view()->findChildrenType<Kst2DPlot>(false); Kst2DPlotList::Iterator plot_iter=plotlist.findTag(plotName); if (plot_iter != plotlist.end()) { app->deleteIterator(iter); (*plot_iter)->setXScaleMode(FIXED); (*plot_iter)->setYScaleMode(FIXED); (*plot_iter)->setScale(XLower, YLower, XUpper, YUpper); //set the scale // repaint the plot (*plot_iter)->setDirty(); viewwindow->view()->paint(KstPainter::P_PLOT); return true; } } iter->next(); } app->deleteIterator(iter); return false; }
QStringList KstIfaceImpl::plotList() { QStringList rc; KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *it = app->createIterator(); while (it->currentItem()) { rc += plotList(it->currentItem()->caption()); it->next(); } app->deleteIterator(it); return rc; }
void KstObjectItem::paintPlot(Kst2DPlotPtr p) { KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *it = app->createIterator(); while (it->currentItem()) { KstViewWindow *v = dynamic_cast<KstViewWindow*>(it->currentItem()); if (v && v->view()->contains(kst_cast<KstViewObject>(p))) { v->view()->paint(KstPainter::P_PLOT); break; } it->next(); } app->deleteIterator(it); }
QStringList KstBindWindowCollection::collection(KJS::ExecState *exec) const { Q_UNUSED(exec) QStringList rc; KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *it = app->createIterator(); if (it) { while (it->currentItem()) { rc += it->currentItem()->caption(); it->next(); } app->deleteIterator(it); } return rc; }
bool KstGuiData::viewObjectNameNotUnique(const QString& tag) { KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *it = app->createIterator(); if (it) { while (it->currentItem()) { KstViewWindow *view = dynamic_cast<KstViewWindow*>(it->currentItem()); if (view) { if (view->view()->findChild(tag, true)) { return (true); } } it->next(); } app->deleteIterator(it); } return false; }
QStringList KstIfaceImpl::plotContents(const QString& name) { //iterate through the windows until plot is found KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *iter = app->createIterator(); while (iter->currentItem()) { KMdiChildView *childview = iter->currentItem(); KstViewWindow *viewwindow = dynamic_cast<KstViewWindow*>(childview); if (viewwindow) { Kst2DPlotList plotlist = viewwindow->view()->findChildrenType<Kst2DPlot>(false); Kst2DPlotList::Iterator plot_iter=plotlist.findTag(name); if (plot_iter != plotlist.end()) { app->deleteIterator(iter); return (*plot_iter)->Curves.tagNames(); } } iter->next(); } app->deleteIterator(iter); return QStringList(); }
bool KstIfaceImpl::toggleMaximizePlot(const QString& plotName) { KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *iter = app->createIterator(); while (iter->currentItem()) { KMdiChildView *childview = iter->currentItem(); KstViewWindow *viewwindow = dynamic_cast<KstViewWindow*>(childview); if (viewwindow) { Kst2DPlotList plotlist = viewwindow->view()->findChildrenType<Kst2DPlot>(false); Kst2DPlotList::Iterator plot_iter = plotlist.findTag(plotName); if (plot_iter != plotlist.end()) { app->deleteIterator(iter); (*plot_iter)->zoomToggle(); return true; } } iter->next(); } app->deleteIterator(iter); return false; }
bool KstIfaceImpl::addPlotMarker(const QString &plotName, double markerValue) { //find the plot KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *iter = app->createIterator(); while (iter->currentItem()) { KMdiChildView *childview = iter->currentItem(); KstViewWindow *viewwindow = dynamic_cast<KstViewWindow*>(childview); if (viewwindow) { Kst2DPlotList plotlist = viewwindow->view()->findChildrenType<Kst2DPlot>(false); Kst2DPlotList::Iterator plot_iter=plotlist.findTag(plotName); if (plot_iter != plotlist.end() && (*plot_iter)->setPlotMarker(markerValue)) { app->deleteIterator(iter); // repaint the plot (*plot_iter)->setDirty(); viewwindow->view()->paint(KstPainter::P_PLOT); return true; } } iter->next(); } app->deleteIterator(iter); return false; }
bool KstChangeFileDialogI::applyFileChange() { KstDataSourcePtr file; KST::dataSourceList.lock().writeLock(); KstDataSourceList::Iterator it = KST::dataSourceList.findReusableFileName(_dataFile->url()); QString invalidSources; int invalid = 0; if (it == KST::dataSourceList.end()) { file = KstDataSource::loadSource(_dataFile->url()); if (!file || !file->isValid()) { KST::dataSourceList.lock().unlock(); KMessageBox::sorry(this, i18n("The file could not be loaded.")); return false; } if (file->isEmpty()) { KST::dataSourceList.lock().unlock(); KMessageBox::sorry(this, i18n("The file does not contain data.")); return false; } KST::dataSourceList.append(file); } else { file = *it; } KST::dataSourceList.lock().unlock(); KstApp *app = KstApp::inst(); KstRVectorList rvl = kstObjectSubList<KstVector,KstRVector>(KST::vectorList); KstRMatrixList rml = kstObjectSubList<KstMatrix,KstRMatrix>(KST::matrixList); int selected = 0; int handled = 0; int count = (int)ChangeFileCurveList->count(); for (int i = 0; i < count; i++) { if (ChangeFileCurveList->isSelected(i)) { ++selected; } } // a map to keep track of which objects have been duplicated, and mapping // old object -> new object KstDataObjectDataObjectMap duplicatedMap; QMap<KstVectorPtr, KstVectorPtr> duplicatedVectors; QMap<KstMatrixPtr, KstMatrixPtr> duplicatedMatrices; KstDataSourceList oldSources; // go through the vectors for (int i = 0; i < (int)rvl.count(); i++) { if (ChangeFileCurveList->isSelected(i)) { KstRVectorPtr vector = rvl[i]; vector->writeLock(); file->readLock(); bool valid = file->isValidField(vector->field()); file->unlock(); if (!valid) { if (invalid > 0) { // FIXME: invalid list construction for i18n invalidSources = i18n("%1, %2").arg(invalidSources).arg(vector->field()); } else { invalidSources = vector->field(); } ++invalid; } else { if (_duplicateSelected->isChecked()) { // block vector updates until vector is setup properly KST::vectorList.lock().writeLock(); // create a new vector KstRVectorPtr newVector = vector->makeDuplicate(); if (!oldSources.contains(newVector->dataSource())) { oldSources << newVector->dataSource(); } newVector->changeFile(file); KST::vectorList.lock().unlock(); // duplicate dependents if (_duplicateDependents->isChecked()) { duplicatedVectors.insert(KstVectorPtr(vector), KstVectorPtr(newVector)); KST::duplicateDependents(KstVectorPtr(vector), duplicatedMap, duplicatedVectors); } } else { if (!oldSources.contains(vector->dataSource())) { oldSources << vector->dataSource(); } vector->changeFile(file); } } vector->unlock(); app->slotUpdateProgress(selected, ++handled, i18n("Updating vectors...")); } } // go through the matrices for (int i = (int)rvl.count(); i < (int)ChangeFileCurveList->count(); i++) { if (ChangeFileCurveList->isSelected(i)) { KstRMatrixPtr matrix = rml[i-rvl.count()]; matrix->writeLock(); file->readLock(); bool valid = file->isValidMatrix(matrix->field()); file->unlock(); if (!valid) { if (invalid > 0) { // FIXME: invalid list construction for i18n invalidSources = i18n("%1, %2").arg(invalidSources).arg(matrix->field()); } else { invalidSources = matrix->field(); } ++invalid; } else { if (_duplicateSelected->isChecked()) { // block matrix updates until matrix is setup properly KST::matrixList.lock().writeLock(); // create a new matrix KstRMatrixPtr newMatrix = matrix->makeDuplicate(); if (!oldSources.contains(newMatrix->dataSource())) { oldSources << newMatrix->dataSource(); } newMatrix->changeFile(file); KST::matrixList.lock().unlock(); // duplicate dependents if (_duplicateDependents->isChecked()) { duplicatedMatrices.insert(KstMatrixPtr(matrix), KstMatrixPtr(newMatrix)); KST::duplicateDependents(KstMatrixPtr(matrix), duplicatedMap, duplicatedMatrices); } } else { if (!oldSources.contains(matrix->dataSource())) { oldSources << matrix->dataSource(); } matrix->changeFile(file); } } matrix->unlock(); app->slotUpdateProgress(selected, ++handled, i18n("Updating matrices...")); } } app->slotUpdateProgress(0, 0, QString::null); file = 0L; // now add any curves and images to plots if they were duplicated if (_duplicateSelected->isChecked() && _duplicateDependents->isChecked()) { KstApp *app = KstApp::inst(); KMdiIterator<KMdiChildView*> *it = app->createIterator(); while (it->currentItem()) { KstViewWindow *w = dynamic_cast<KstViewWindow*>(it->currentItem()); if (w) { KstTopLevelViewPtr view = kst_cast<KstTopLevelView>(w->view()); if (view) { Kst2DPlotList plots = view->findChildrenType<Kst2DPlot>(true); for (Kst2DPlotList::Iterator plotIter = plots.begin(); plotIter != plots.end(); ++plotIter) { for (KstDataObjectDataObjectMap::ConstIterator iter = duplicatedMap.begin(); iter != duplicatedMap.end(); ++iter) { if (KstBaseCurvePtr curve = kst_cast<KstBaseCurve>(iter.data())) { if ((*plotIter)->Curves.contains(kst_cast<KstBaseCurve>(iter.key())) && !(*plotIter)->Curves.contains(kst_cast<KstBaseCurve>(curve))) { (*plotIter)->addCurve(curve); } } } } } } it->next(); } app->deleteIterator(it); } // clean up unused data sources // kstdDebug() << "cleaning up data sources" << endl; KST::dataSourceList.lock().writeLock(); for (KstDataSourceList::Iterator it = oldSources.begin(); it != oldSources.end(); ++it) { // kstdDebug() << "DATA SOURCE: " << (*it)->tag().displayString() << " (" << (void*)(*it) << ") USAGE: " << (*it)->getUsage() << endl; if ((*it)->getUsage() == 1) { // kstdDebug() << " -> REMOVED" << endl; KST::dataSourceList.remove((*it).data()); } } KST::dataSourceList.lock().unlock(); if (!invalidSources.isEmpty()) { if (invalid == 1) { KMessageBox::sorry(this, i18n("The following field is not defined for the requested file:\n%1").arg(invalidSources)); } else { KMessageBox::sorry(this, i18n("The following fields are not defined for the requested file:\n%1").arg(invalidSources)); } } emit docChanged(); // force an update in case we're in paused mode KstApp::inst()->forceUpdate(); 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; }
void KstCurveDifferentiateI::apply() { KstApp *app = KstApp::inst(); KstViewWindow *window; int maxSequences = 0; getOptions(); saveProperties(); _seqVect.clear(); _seqVect.resize(4); if (_lineColorOrder > -1) { _lineColorSeq.setRange(0, KstColorSequence::count()); _seqVect.insert(_lineColorOrder, &_lineColorSeq); maxSequences++; } if (_pointStyleOrder > -1) { _pointStyleSeq.setRange(0, KSTPOINT_MAXTYPE - 1); _seqVect.insert(_pointStyleOrder, &_pointStyleSeq); maxSequences++; } if (_lineStyleOrder > -1) { _lineStyleSeq.setRange(0, KSTLINESTYLE_MAXTYPE - 1); _seqVect.insert(_lineStyleOrder, &_lineStyleSeq); maxSequences++; } if (_lineWidthOrder > -1) { _lineWidthSeq.setRange(1, KSTLINEWIDTH_MAX); _seqVect.insert(_lineWidthOrder, &_lineWidthSeq); maxSequences++; } if (maxSequences > 0) { int i; _seqVect.resize(maxSequences); for (i = 0; i < maxSequences-1; i++) { _seqVect[i]->hookToNextSequence(_seqVect[i+1]); } _seqVect[maxSequences-1]->hookToNextSequence(0L); if (_applyTo == 0) { window = dynamic_cast<KstViewWindow*>(app->activeWindow()); if (window) { cycleWindow(window); } } else { KMdiIterator<KMdiChildView*> *it = app->createIterator(); if (it) { while (it->currentItem()) { if (_repeatAcross == 1) { _seqVect[0]->reset(); } window = dynamic_cast<KstViewWindow*>(it->currentItem()); if (window && !window->view()->children().isEmpty()) { cycleWindow(window); } it->next(); } app->deleteIterator(it); } } } close(); }