[Kst] extragear/graphics/kst/src

Barth Netterfield netterfield at astro.utoronto.ca
Tue Nov 28 19:54:53 CET 2006


I haven't had time to look at it yet, but here are some preemtive questions:
-when you read an RVector which had cached data, what happens if:

C1:The data source does not exist on the machine you running kst on?
	A: the cached data is plotted  If you change frame ranges, only 
cached data in the new range is plotted, etc.  Indexes are relative to the 
original data source.

C2: The data source does exist on the machine you are running kst on?
	a1) the data source is read (and the cache is ignored and is only for backup)
or	a2) the cached data is shown unless something happens... possible 
somethings
		-frame range is changed to not include all of the cached data
		-reload is pressed

or	a3) the cached data is compared to the data in the data source.  If they 
are the same, the data source is silently shown.  If they are different, a 
dialog pops up to let the user decide which to use.  A mechanism exists 
(reload?) to let the user to later switch to the data file data.

I think I like A3.

cbn

On Monday 27 November 2006 03:55, George Staikos wrote:
> SVN commit 608243 by staikos:
>
> add the ability to save data to the Kst file.  This is rather incomplete
> and the UI is a temporary hack for demonstration purposes.  KstAVector is
> now basically a no-op.  Questions to be answered:
> 1) What should RVector do if there is cached data?
> 2) How fine grained should saving data be?  What should the UI be?
>
>
>  M  +2 -1      kst/kstui.rc
>  M  +8 -59     libkst/kstavector.cpp
>  M  +4 -2      libkst/kstavector.h
>  M  +3 -6      libkst/kstrvector.cpp
>  M  +10 -8     libkst/kstsvector.cpp
>  M  +3 -2      libkst/kstsvector.h
>  M  +84 -5     libkst/kstvector.cpp
>  M  +10 -3     libkst/kstvector.h
>  M  +6 -0      libkstapp/kst.cpp
>  M  +4 -1      libkstapp/kst.h
>  M  +1 -0      libkstapp/kstdoc.cpp
>
>
> --- trunk/extragear/graphics/kst/src/kst/kstui.rc #608242:608243
> @@ -1,10 +1,11 @@
>  <!DOCTYPE kpartgui>
> -<kpartgui version="12" name="kst">
> +<kpartgui version="13" name="kst">
>  <MenuBar>
>    <Menu name="file"><text>&amp;File</text>
>      <Action name="file_new_window"/>
>      <Action name="graphfiledialog_action"/>
>      <Action name="vectorsavedialog_action"/>
> +    <Action name="save_vector_data"/>
>      <Merge/>
>    </Menu>
>    <Menu name="edit"><text>&amp;Edit</text>
> --- trunk/extragear/graphics/kst/src/libkst/kstavector.cpp #608242:608243
> @@ -20,55 +20,12 @@
>
>  #include "kstavector.h"
>  #include "kstdebug.h"
> -#include <qcstring.h>
> -#include <qstylesheet.h>
> -#include <klocale.h>
> -#include <kmdcodec.h>
>
>  KstAVector::KstAVector(const QDomElement &e)
> -: KstVector() {
> +: KstVector(e) {
>    _editable = true;
> -  int in_n = 2;
> -  /* parse the DOM tree */
> -  QDomNode n = e.firstChild();
> -  while (!n.isNull()) {
> -    QDomElement e = n.toElement();
> -    if (!e.isNull()) {
> -      if (e.tagName() == "tag") {
> -        setTagName(e.text());
> -      } else if (e.tagName() == "N") {
> -        in_n = e.text().toInt();
> -      }
> -    }
> -    n = n.nextSibling();
> -  }
>    _saveable = true;
> -  resize(in_n, true);
> -
> -  if (in_n > 0) {
> -    QDomNode n = e.firstChild();
> -    while (!n.isNull()) {
> -      QDomElement e = n.toElement();
> -      if (!e.isNull()) {
> -        if (e.tagName() == "data") {
> -          QCString qcs(e.text().latin1());
> -          QByteArray qbca;
> -          KCodecs::base64Decode(qcs, qbca);
> -          QByteArray qba = qUncompress(qbca);
> -          QDataStream qds(qba, IO_ReadOnly);
> -          int i;
> -          for (i = 0; i < in_n && !qds.atEnd(); i++) {
> -            qds >> _v[i];
> -          }
> -          if (i < in_n) {
> -            KstDebug::self()->log(i18n("Saved vector contains less data
> than it claims."), KstDebug::Warning); -            resize(i, false);
> -          }
> -        }
> -      }
> -      n = n.nextSibling();
> -    }
> -  }
> +  _saveData = true;
>  }
>
>
> @@ -76,25 +33,13 @@
>
>  : KstVector(tag, n) {
>
>    _editable = true;
>    _saveable = true;
> -  resize(n, true);
> +  _saveData = true;
>  }
>
>
>  void KstAVector::save(QTextStream &ts, const QString& indent, bool
> saveAbsolutePosition) { -  Q_UNUSED(saveAbsolutePosition)
> -
> -  QByteArray qba(length()*sizeof(double));
> -  QDataStream qds(qba, IO_WriteOnly);
> -
> -  for (int i = 0; i < length(); i++) {
> -    qds << _v[i];
> -  }
> -
>    ts << indent << "<avector>" << endl;
> -
> -  ts << indent << "  <tag>" << QStyleSheet::escape(tagName()) << "</tag>"
> << endl; -  ts << indent << "  <N>" << length() << "</N>" << endl;
> -  ts << indent << "  <data>" << KCodecs::base64Encode(qCompress(qba)) <<
> "</data>" << endl; +  KstVector::save(ts, indent + "  ",
> saveAbsolutePosition);
>    ts << indent << "</avector>" << endl;
>  }
>
> @@ -115,4 +60,8 @@
>  }
>
>
> +void KstAVector::setSaveData(bool save) {
> +  Q_UNUSED(save)
> +}
> +
>  // vim: ts=2 sw=2 et
> --- trunk/extragear/graphics/kst/src/libkst/kstavector.h #608242:608243
> @@ -28,9 +28,11 @@
>    KST_EXPORT KstAVector(const QDomElement &e);
>    KST_EXPORT KstAVector(int n, const QString& tag);
>
> -  virtual void save(QTextStream &ts, const QString& indent =
> QString::null, bool saveAbsolutePosition = false); +  void save(QTextStream
> &ts, const QString& indent = QString::null, bool saveAbsolutePosition =
> false);
>
> -  virtual KstObject::UpdateType update(int update_counter);
> +  KstObject::UpdateType update(int update_counter);
> +
> +  void setSaveData(bool save);
>  };
>
>  typedef KstSharedPtr<KstAVector> KstAVectorPtr;
> --- trunk/extragear/graphics/kst/src/libkst/kstrvector.cpp #608242:608243
> @@ -52,7 +52,7 @@
>
>  KstRVector::KstRVector(const QDomElement &e, const QString &o_file,
>                         int o_n, int o_f, int o_s, bool o_ave)
> -: KstVector() {
> +: KstVector(e) {
>    KstDataSourcePtr in_file;
>    QString in_field;
>    int in_f0 = 0;
> @@ -66,9 +66,7 @@
>    while (!n.isNull()) {
>      QDomElement e = n.toElement();
>      if (!e.isNull()) {
> -      if (e.tagName() == "tag") {
> -        setTagName(e.text());
> -      } else if (e.tagName() == "filename") {
> +      if (e.tagName() == "filename") {
>          KST::dataSourceList.lock().readLock();
>          if (o_file == "|") {
>            in_file = *KST::dataSourceList.findFileName(e.text());
> @@ -304,8 +302,7 @@
>  void KstRVector::save(QTextStream &ts, const QString& indent, bool
> saveAbsolutePosition) { if (_file) {
>      ts << indent << "<vector>" << endl;
> -
> -    ts << indent << "  <tag>" << QStyleSheet::escape(tagName()) <<
> "</tag>" << endl; +    KstVector::save(ts, indent + "  ",
> saveAbsolutePosition);
>      _file->readLock();
>      ts << indent << "  <filename>" <<
> QStyleSheet::escape(_file->fileName()) << "</filename>" << endl;
> _file->unlock();
> --- trunk/extragear/graphics/kst/src/libkst/kstsvector.cpp #608242:608243
> @@ -18,7 +18,7 @@
>  #include "ksdebug.h"
>  #include <qstylesheet.h>
>
> -KstSVector::KstSVector(const QDomElement &e) : KstVector() {
> +KstSVector::KstSVector(const QDomElement &e) : KstVector(e) {
>    double in_x0 = 0.0;
>    double in_x1 = 1.0;
>    int in_n = 2;
> @@ -28,9 +28,7 @@
>    while (!n.isNull()) {
>      QDomElement e = n.toElement();
>      if (!e.isNull()) {
> -      if (e.tagName() == "tag") {
> -        setTagName(e.text());
> -      } else if (e.tagName() == "N") {
> +      if (e.tagName() == "N") {
>          in_n = e.text().toInt();
>        } else if (e.tagName() == "min") {
>          in_x0 = e.text().toDouble();
> @@ -42,22 +40,21 @@
>    }
>
>    _saveable = true;
> +  _saveData = false;
>    changeRange( in_x0,  in_x1,  in_n );
>  }
>
>
>  KstSVector::KstSVector(double x0, double x1, int n, const QString &tag) :
> KstVector(tag, n) { _saveable = true;
> +  _saveData = false;
>    changeRange( x0, x1, n );
>  }
>
>
>  void KstSVector::save(QTextStream &ts, const QString& indent, bool
> saveAbsolutePosition) { -  Q_UNUSED( saveAbsolutePosition )
>    ts << indent << "<svector>" << endl;
> -
> -  ts << indent << "  <tag>" << QStyleSheet::escape(tagName())
> -    << "</tag>" << endl;
> +  KstVector::save(ts, indent + "  ", saveAbsolutePosition);
>    ts << indent << "  <min>" << min() << "</min>" << endl;
>    ts << indent << "  <max>" << max() << "</max>" << endl;
>    ts << indent << "  <N>" << length() << "</N>" << endl;
> @@ -105,4 +102,9 @@
>  }
>
>
> +void KstSVector::setSaveData(bool save) {
> +  Q_UNUSED(save)
> +}
> +
> +
>  // vim: ts=2 sw=2 et
> --- trunk/extragear/graphics/kst/src/libkst/kstsvector.h #608242:608243
> @@ -28,10 +28,11 @@
>    KstSVector(const QDomElement &e);
>    KstSVector(double x0, double x1, int n, const QString& tag);
>
> -  virtual void save(QTextStream &ts, const QString& indent =
> QString::null, bool saveAbsolutePosition = false); +  void save(QTextStream
> &ts, const QString& indent = QString::null, bool saveAbsolutePosition =
> false);
>
>    void changeRange(double x0, double x1, int n);
> -  virtual KstObject::UpdateType update(int update_counter);
> +  KstObject::UpdateType update(int update_counter);
> +  void setSaveData(bool save);
>  };
>
>  typedef KstSharedPtr<KstSVector> KstSVectorPtr;
> --- trunk/extragear/graphics/kst/src/libkst/kstvector.cpp #608242:608243
> @@ -20,11 +20,15 @@
>  #include <math.h>
>  #include <stdlib.h>
>
> +#include <qcstring.h>
>  #include <qdeepcopy.h>
>  #include <qstylesheet.h>
>
> +#include <kglobal.h>
> +#include <klocale.h>
> +#include <kmdcodec.h>
> +
>  #include "ksdebug.h"
> -#include <klocale.h>
>  #include "kstdatacollection.h"
>  #include "defaultprimitivenames.h"
>  #include "kstmath.h"
> @@ -47,8 +51,8 @@
>    _editable = false;
>    NumShifted = 0;
>    NumNew = 0;
> +  _saveData = false;
>    _isScalarList = isScalarList;
> -  _label = QString::null;
>
>    _saveable = false;
>
> @@ -82,6 +86,63 @@
>  }
>
>
> +KstVector::KstVector(const QDomElement& e)
> +: KstPrimitive(), _nsum(0), _scalars(11) {
> +  QByteArray qba;
> +  _v = 0L;
> +  int sz = INITSIZE;
> +
> +  _editable = false;
> +  NumShifted = 0;
> +  NumNew = 0;
> +  _isScalarList = false;
> +  _saveable = false;
> +  _saveData = false;
> +
> +  QDomNode n = e.firstChild();
> +  while (!n.isNull()) {
> +    QDomElement e = n.toElement();
> +    if (!e.isNull()) {
> +      if (e.tagName() == "tag") {
> +        KstObject::setTagName(e.text());
> +      } else if (e.tagName() == "data") {
> +        QCString qcs(e.text().latin1());
> +        QByteArray qbca;
> +        KCodecs::base64Decode(qcs, qbca);
> +        qba = qUncompress(qbca);
> +        sz = kMax(unsigned(INITSIZE), qba.size()/sizeof(double));
> +      }
> +    }
> +    n = n.nextSibling();
> +  }
> +
> +  if (tagName().isEmpty()) {
> +    QString nt = i18n("Anonymous Vector %1");
> +    do {
> +      KstObject::setTagName(nt.arg(anonymousVectorCounter++));
> +    } while (KstData::self()->vectorTagNameNotUnique(tagName(), false));
> +  } else {
> +    while (KstData::self()->vectorTagNameNotUnique(tagName(), false)) {
> +      KstObject::setTagName(tagName() + '\'');
> +    }
> +  }
> +
> +  CreateScalars();
> +  resize(sz, true);
> +
> +  if (!qba.isEmpty()) {
> +    _saveable = true;
> +    _saveData = true;
> +    QDataStream qds(qba, IO_ReadOnly);
> +    for (int i = 0; !qds.atEnd(); ++i) {
> +      qds >> _v[i];
> +    }
> +  }
> +
> +  _is_rising = false;
> +}
> +
> +
>  KstVector::~KstVector() {
>    //kstdDebug() << "+++ DELETING VECTOR: " << (void*) this << endl;
>    KST::scalarList.lock().writeLock();
> @@ -510,9 +571,17 @@
>
>  void KstVector::save(QTextStream &ts, const QString& indent, bool
> saveAbsolutePosition) { Q_UNUSED(saveAbsolutePosition)
> -    Q_UNUSED(ts)
> -    Q_UNUSED(indent)
> -    abort();
> +  ts << indent << "<tag>" << QStyleSheet::escape(tagName()) << "</tag>" <<
> endl; +  if (_saveData) {
> +    QByteArray qba(length()*sizeof(double));
> +    QDataStream qds(qba, IO_WriteOnly);
> +
> +    for (int i = 0; i < length(); i++) {
> +      qds << _v[i];
> +    }
> +
> +    ts << indent << "<data>" << KCodecs::base64Encode(qCompress(qba)) <<
> "</data>" << endl; +  }
>  }
>
>
> @@ -614,6 +683,16 @@
>  }
>
>
> +bool KstVector::saveData() const {
> +  return _saveData;
> +}
> +
> +
> +void KstVector::setSaveData(bool save) {
> +  _saveData = save;
> +}
> +
> +
>  #undef ZERO_MEMORY
>  #undef INITSIZE
>
> --- trunk/extragear/graphics/kst/src/libkst/kstvector.h #608242:608243
> @@ -55,6 +55,7 @@
>       * Vectors do not automatically add themselves to the global vector
> list */
>      KstVector(const QString& name = QString::null, int size = 0, KstObject
> *provider = 0L, bool bIsScalarList = false); +    KstVector(const
> QDomElement& e);
>
>      virtual ~KstVector();
>
> @@ -144,13 +145,13 @@
>      bool editable() const;
>      void setEditable(bool editable);
>
> +    bool saveData() const;
> +    virtual void setSaveData(bool save);
> +
>    protected:
>      /** current number of samples */
>      int _size;
>
> -    /** can/should the vector be saved... */
> -    bool _saveable;
> -
>      /** number of valid points */
>      int _nsum;
>
> @@ -181,6 +182,12 @@
>      this is false. */
>      bool _editable : 1;
>
> +    /** can/should the vector be saved */
> +    bool _saveable : 1;
> +
> +    /** should the vector data be saved? */
> +    bool _saveData : 1;
> +
>      double _min, _max, _mean, _minPos;
>
>      /** Possibly null.  Be careful, this is non-standard usage of a
> KstShared. --- trunk/extragear/graphics/kst/src/libkstapp/kst.cpp
> #608242:608243 @@ -436,6 +436,12 @@
>    connect(PauseAction, SIGNAL(toggled(bool)), this,
> SLOT(updatePausedState(bool)));
>
>    /************/
> +  _saveData = new KToggleAction(i18n("Save Da&ta"),"save_vector_data", 0,
> +                                  actionCollection(), "save_vector_data");
> +  _saveData->setToolTip(i18n("Save Vector Data To Disk"));
> +  _saveData->setWhatsThis(i18n("When selected, data in vectors will be
> saved into the Kst file.")); +
> +  /************/
>    XYZoomAction = new KRadioAction(i18n("XY Mouse &Zoom"), "kst_zoomxy",
>                                    KShortcut(Key_F2),
>                                    this, SLOT(toggleMouseMode()),
> --- trunk/extragear/graphics/kst/src/libkstapp/kst.h #608242:608243
> @@ -129,7 +129,8 @@
>      /** Get XY zoom radio button state */
>      KstZoomType getZoomRadio();
>      KstGraphicType getGraphicType();
> -
> +    bool saveData() const { return _saveData->isChecked(); }
> +
>      KstTopLevelView::ViewMode currentViewMode();
>      QString currentCreateType();
>
> @@ -549,6 +550,8 @@
>      KAction *fileCopy;
>      KAction *filePaste;
>
> +    KToggleAction *_saveData;
> +
>      KRadioAction *_gfxLineAction;
>      KRadioAction *_gfxRectangleAction;
>      KRadioAction *_gfxEllipseAction;
> --- trunk/extragear/graphics/kst/src/libkstapp/kstdoc.cpp #608242:608243
> @@ -676,6 +676,7 @@
>    // save vectors
>    for (KstVectorList::Iterator it = KST::vectorList.begin(); it !=
> KST::vectorList.end(); ++it) { if ((*it)->saveable()) {
> +      (*it)->setSaveData(KstApp::inst()->saveData());
>        (*it)->save(ts, "  ", saveAbsoluteVectorPositions);
>      }
>    }
> _______________________________________________
> Kst mailing list
> Kst at kde.org
> https://mail.kde.org/mailman/listinfo/kst


More information about the Kst mailing list