All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Classes | Public Member Functions | Static Public Attributes | Protected Member Functions | Properties
GeopsyGui::TimeWindowLayer Class Reference

#include <TimeWindowLayer.h>

Inheritance diagram for GeopsyGui::TimeWindowLayer:
SciFigs::GraphContentLayer QGpGuiTools::PropertyItem QGpCoreTools::XMLClass

List of all members.

Classes

struct  XMLTimeWindowList

Public Member Functions

void addTimeWindows (const SubSignalPool &subPool, TimeWindowList *l)
void addTimeWindows (Signal *sig, TimeWindowList *l)
virtual Rect boundingRect () const
void clearTimeWindows ()
void setShowColors (bool b)
void setSize (double s)
bool showColors () const
double size () const
 TimeWindowLayer (AxisWindow *parent=0)
 TimeWindowLayer (SignalLayer *sig)
virtual const QString & xml_tagName () const
virtual ~TimeWindowLayer ()

Static Public Attributes

static const QString xmlTimeWindowLayerTag = "TimeWindowLayer"

Protected Member Functions

virtual void xml_layerPolish (XML_POLISH_ARGS)
virtual XMLMember xml_member (XML_MEMBER_ARGS)
virtual bool xml_setProperty (XML_SETPROPERTY_ARGS)
virtual void xml_writeChildren (XML_WRITECHILDREN_ARGS) const
virtual void xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const

Properties

bool showColors
double size

Constructor & Destructor Documentation

References TRACE.

    : GraphContentLayer(parent)
{
  TRACE;
  _sig=0;
  _size=0.375;
  _showColors=false;
  _windowOwner=false;
  _xmlWindows=0;
}

References SciFigs::GraphContentLayer::addReference(), and TRACE.

    : GraphContentLayer(sig->graph())
{
  TRACE;
  _sig=sig;
  _sig->addReference();
  _size=0.375;
  _showColors=false;
  _windowOwner=false;
  _xmlWindows=0;
}

References SciFigs::GraphContentLayer::removeReference(), and TRACE.

{
  TRACE;
  if(_windowOwner) {
    for(QMap<Signal *, TimeWindowList *>::iterator it=_windows.begin(); it!=_windows.end(); it++) {
      delete it.value();
    }
  }
  if(_sig) {
    _sig->removeReference();
  }
  delete _xmlWindows;
}

Member Function Documentation

For convenience, links all signals of subPool to time window list l

References GeopsyCore::SubSignalPool::begin(), GeopsyCore::SubSignalPool::end(), and TRACE.

Referenced by ManualPick::init(), ToolSpectrum::initStations(), ToolStructure::initStations(), ToolHV::initStations(), and ToolArrayBase::setTimeWindowLayer().

{
  TRACE;
  LayerLocker ll(this);
  for(SubSignalPool::const_iterator it=subPool.begin(); it!=subPool.end(); it++) {
    _windows.insert(*it, l);
  }
}

Links signal sig to time window list l

References TRACE.

{
  TRACE;
  LayerLocker ll(this);
  _windows.insert(sig, l);
}

Implements SciFigs::GraphContentLayer.

References GeopsyGui::SignalLayer::boundingRect(), and TRACE.

{
  TRACE;
  if(_sig) {
    return _sig->boundingRect();
  } else {
    return Rect();
  }
}

References TRACE.

{
  TRACE;
  LayerLocker ll(this);
  _windows.clear();
}

References TRACE.

{
  TRACE;
  LayerLocker ll(this);
  _size=s;
}
bool GeopsyGui::TimeWindowLayer::showColors ( ) const [inline]
{return _showColors;}
double GeopsyGui::TimeWindowLayer::size ( ) const [inline]
{return _size;}

Reconstruct link to SignalLayer and identifies signal pointers.

Reimplemented from SciFigs::GraphContentLayer.

References SciFigs::GraphContentLayer::addReference(), GeopsyCore::SubSignalPool::at(), SciFigs::XMLSciFigs::data(), SciFigs::GraphContent::findLayer(), SciFigs::GraphContentLayer::graphContent(), GeopsyGui::SignalLayer::subPool(), and GeopsyGui::SignalLayer::xmlSignalLayerTag.

{
  XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context);
  if(scifigsContext->data() && _xmlWindows) {
    _sig=qobject_cast<SignalLayer *>(graphContent()->findLayer(SignalLayer::xmlSignalLayerTag,
                                                               _xmlWindows->_signalLayerName));
    if(_sig) {
      const SubSignalPool * subPool=_sig->subPool();
      for(QMap<int, TimeWindowList *>::iterator it=_xmlWindows->_windows.begin(); it!=_xmlWindows->_windows.end(); it++) {
        int index=it.key();
        if(index>=0 && index<subPool->count()) {
          _windows.insert(subPool->at(index), it.value());
        } else {
          delete it.value();
        }
      }
      _windowOwner=true;
      _sig->addReference();
    } else {
      for(QMap<int, TimeWindowList *>::iterator it=_xmlWindows->_windows.begin(); it!=_xmlWindows->_windows.end(); it++) {
        delete it.value();
      }
    }
    delete _xmlWindows;
    _xmlWindows=0;
  }
}

Re-implement this function to offer XML restore (children and properties) support to your class.

From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:

  • An integer: id number of a property
  • A XMLClass * : a child of this object identified by tag
  • Default constructor: error, unknow child or property

Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):

    static const QString tmp("childrenName");
    XMLRestoreAttributeIterator it=map.find(tmp);
    if(it!=map.end()) {
      // found attribute "childrenName"
    }

If the map of attributes is not used:

    Q_UNUSED(attributes);
    if(tag=="x1") return XMLMember(0);
    else if(tag=="y1") return XMLMember(1);
    else if(tag=="x2") return XMLMember(2);
    else if(tag=="y2") return XMLMember(3);
    else return XMLMember(XMLMember::Unknown);

Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.

    if(tag=="anInteger") return XMLMember(0);
    else if(tag=="aString") return XMLMember(1);
    else if(tag=="aDouble") return XMLMember(2);
    return AbstractLine::xml_member(tag, attributes, context)+3;

For the arguments of this function use Macro XML_MEMBER_ARGS.

Reimplemented from SciFigs::GraphContentLayer.

References SciFigs::XMLSciFigs::data(), QGpCoreTools::endl(), SciFigs::XMLSciFigs::makeUp(), QGpCoreTools::tr(), and TRACE.

{
  TRACE;
  XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context);
  if(scifigsContext->data()) {
    if(tag=="TimeWindowList") {
      const QString attID="signalIndex";
      XMLRestoreAttributeIterator it=attributes.find(attID);
      if(it!=attributes.end()) {
        int signalIndex=it.value().toInt();
        if(!_xmlWindows) {
          _xmlWindows=new XMLTimeWindowList;
        }
        TimeWindowList * w=new TimeWindowList;
        _xmlWindows->_windows.insert(signalIndex, w);
        return XMLMember(w);
      } else {
        App::stream() << tr("Missing signal index attribute") << endl;
        return XMLMember(XMLMember::Unknown);
      }
    } else if(tag=="signalLayerName") {
      return  XMLMember(0);
    }
  }
  if(scifigsContext->makeUp()) {
    if(tag=="size") {
      return  XMLMember(1);
    } else if(tag=="showColors") {
      return  XMLMember(2);
    }
  }
  return GraphContentLayer::xml_member(tag, attributes, context)+3;
}

Re-implement this function to offer XML restore properties support to your class.

From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).

For a general case:

  Q_UNUSED(attributes);
  double val=content.toDouble();
  switch (memberID) {
  case 0:
    _x1=val;
    return true;
  case 1:
    _y1=val;
    return true;
  case 2:
    _x2=val;
    return true;
  case 3:
    _y2=val;
    return true;
  default:
    return false;
  }

For classes inheriting other classes (see also xml_member())

  switch (memberID) {
  case 0:
    _anInteger=content.toString();
    return true;
  case 1:
    _aString=content.toInt();
    return true;
  case 2:
    _aDouble=content.toDouble();
    return true;
  default:
    return AbstractLine::xml_setProperty(memberID-3, map, content);

For the arguments of this function use Macro XML_SETPROPERTY_ARGS.

Reimplemented from SciFigs::GraphContentLayer.

References TRACE.

{
  TRACE;
  switch (memberID) {
  case 0:
    if(!_xmlWindows) {
      _xmlWindows=new XMLTimeWindowList;
    }
    _xmlWindows->_signalLayerName=content.toString();
    return true;
  case 1:
    _size=content.toDouble();
    return true;
  case 2:
    _showColors=content.toBool();
    return true;
  default:
    return GraphContentLayer::xml_setProperty(memberID-3, tag, attributes, content, context);
  }
}
virtual const QString& GeopsyGui::TimeWindowLayer::xml_tagName ( ) const [inline, virtual]

Reimplemented from SciFigs::GraphContentLayer.

Reimplemented from QGpCoreTools::XMLClass.

References QGpCoreTools::XMLSaveAttributes::add(), GeopsyCore::SubSignalPool::at(), GeopsyCore::SubSignalPool::count(), SciFigs::XMLSciFigs::data(), GeopsyGui::SignalLayer::subPool(), TRACE, and QGpCoreTools::XMLSaveAttributes::value().

{
  TRACE;
  XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context);
  if(_sig && scifigsContext->data()) {
    const SubSignalPool * subPool=_sig->subPool();
    if(subPool) {
      XMLSaveAttributes att;
      att.add("signalIndex");
      QString& index=att.value(0);
      int n=subPool->count();
      QMap<Signal *, TimeWindowList *>::const_iterator it;
      for(int i=0; i<n; i++) {
        it=_windows.find(subPool->at(i));
        if(it!=_windows.end()) {
          index=QString::number(i);
          it.value()->xml_save(s, context, att);
        }
      }
    }
  }
}

Reimplemented from SciFigs::GraphContentLayer.

References SciFigs::XMLSciFigs::data(), SciFigs::GraphContentLayer::objectName, TRACE, and QGpCoreTools::XMLClass::writeProperty().

{
  TRACE;
  XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context);
  if(_sig && scifigsContext->data()) {
    writeProperty(s, "signalLayerName", _sig->objectName());
  }
  writeProperty(s, "size", _size);
  writeProperty(s, "showColors", _showColors);
}

Member Data Documentation

const QString GeopsyGui::TimeWindowLayer::xmlTimeWindowLayerTag = "TimeWindowLayer" [static]

Property Documentation

double GeopsyGui::TimeWindowLayer::size [read, write]

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines