A group is a list of signals. More...
#include <SignalGroup.h>
Public Member Functions | |
| virtual void | addSignals (const SubSignalPool &subPool) |
| virtual bool | convertIds (const QHash< int, Signal * > &ids) |
| virtual bool | directlyContains (const Signal *sig) const |
| bool | hasIds () const |
| virtual bool | hasOwnSignal () const |
| void | openV12 (int dbVersion, const QDir &dbPath) |
| virtual void | removeSignal (Signal *sig) |
| virtual void | setName (const QString &n) |
| virtual void | setSignals (const SubSignalPool &subPool) |
| virtual int | signalCount () const |
| SignalGroup (AbstractSignalGroup *parent=0) | |
| virtual SubSignalPool | subPool () const |
| virtual bool | xml_inherits (const QString &tagName) const |
| virtual const QString & | xml_tagName () const |
| virtual | ~SignalGroup () |
Static Public Attributes | |
| static const QString | xmlSignalGroupTag = "Group" |
Protected Member Functions | |
| virtual XMLMember | xml_member (XML_MEMBER_ARGS) |
| virtual bool | xml_setProperty (XML_SETPROPERTY_ARGS) |
| virtual void | xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const |
A group is a list of signals.
A list of ids is temporarily allocated for loading groups from an XML buffer.
| GeopsyCore::SignalGroup::SignalGroup | ( | AbstractSignalGroup * | parent = 0 | ) |
References TRACE.
: AbstractSignalGroup(parent) { TRACE; _ids=0; }
| GeopsyCore::SignalGroup::~SignalGroup | ( | ) | [virtual] |
| void GeopsyCore::SignalGroup::addSignals | ( | const SubSignalPool & | subPool | ) | [virtual] |
Add new signals to group. It has no effect if it is a group folder.
References GeopsyCore::SubSignalPool::addSubPool(), GeopsyCore::AbstractSignalGroup::name(), GeopsyCore::SubSignalPool::name(), GeopsyCore::AbstractSignalGroup::setModified(), setName(), GeopsyCore::SubSignalPool::setName(), and TRACE.
Referenced by MonoStation::WinResults::categoriesToGroups().
{
TRACE;
_signals.addSubPool(subPool);
if(name().isEmpty()) {
setName(_signals.name());
} else {
_signals.setName(name());
}
setModified(true);
}
| bool GeopsyCore::SignalGroup::convertIds | ( | const QHash< int, Signal * > & | ids | ) | [virtual] |
Converts ID values according to ids.
Reimplemented from GeopsyCore::AbstractSignalGroup.
References GeopsyCore::SubSignalPool::addSignal(), QGpCoreTools::endl(), GeopsyCore::AbstractSignalGroup::name(), GeopsyCore::AbstractSignalGroup::pathName(), GeopsyCore::SubSignalPool::removeAll(), GeopsyCore::SubSignalPool::setName(), QGpCoreTools::tr(), and TRACE.
{
TRACE;
if(_ids) {
_signals.removeAll();
for(QVector<int>::iterator it=_ids->begin(); it!=_ids->end(); it++) {
QHash<int, Signal *>::const_iterator itHash=ids.find(*it);
if(itHash==ids.end()) {
App::stream() << tr("Group '%1': unknow signal ID %2").arg(pathName()).arg(*it) << endl;
return false;
} else {
_signals.addSignal(itHash.value());
}
}
delete _ids;
_ids=0;
_signals.setName(name());
}
return AbstractSignalGroup::convertIds(ids);
}
| bool GeopsyCore::SignalGroup::directlyContains | ( | const Signal * | sig | ) | const [inline, virtual] |
Returns true if it directly contains signal with id.
Reimplemented from GeopsyCore::AbstractSignalGroup.
{return _signals.contains(sig);}
| bool GeopsyCore::SignalGroup::hasIds | ( | ) | const [inline] |
Referenced by GeopsyCore::AbstractSignalGroup::xml_polishChild().
{return _ids;}
| virtual bool GeopsyCore::SignalGroup::hasOwnSignal | ( | ) | const [inline, virtual] |
Returns true if there are signals owned only by this group.
Returns true.
Reimplemented from GeopsyCore::AbstractSignalGroup.
{return true;}
| void GeopsyCore::SignalGroup::openV12 | ( | int | dbVersion, |
| const QDir & | dbPath | ||
| ) |
Loads group from database path of db and eventually translate loaded IDs using the translation map translateID (if not null).
This function is used for compatibility with databases version<3. For these versions, the groups were saved in the same directory as the .sdb file.
References QGpCoreTools::endl(), GeopsyCore::AbstractSignalGroup::name(), GeopsyCore::AbstractSignalGroup::setModified(), QGpCoreTools::tr(), and TRACE.
{
TRACE;
QFile f(dbPath.absoluteFilePath(name()+".group"));
if(f.open(QIODevice::ReadOnly)) {
if(!_ids) {
_ids=new QVector<int>;
}
QDataStream s(&f);
if(dbVersion==1) {
s.setByteOrder(QDataStream::LittleEndian); // To read file from YACL
}
int id;
while(!s.atEnd()) {
s >> id;
(*_ids) << id;
}
} else {
App::stream() << tr("Unable to open %1.group for reading" ).
arg(dbPath.absoluteFilePath(name()) ) << endl;
}
setModified(true);
}
| void GeopsyCore::SignalGroup::removeSignal | ( | Signal * | sig | ) | [virtual] |
Removes one signal sig from group.
Reimplemented from GeopsyCore::AbstractSignalGroup.
References GeopsyCore::SubSignalPool::indexOf(), GeopsyCore::SubSignalPool::removeAt(), GeopsyCore::AbstractSignalGroup::setModified(), and TRACE.
{
TRACE;
int index=_signals.indexOf(sig);
if(index<0) return;
_signals.removeAt(index);
setModified(true);
}
| void GeopsyCore::SignalGroup::setName | ( | const QString & | n | ) | [virtual] |
Sets group's name.
Reimplemented from GeopsyCore::AbstractSignalGroup.
Reimplemented in GeopsyCore::StationGroup.
References GeopsyCore::SubSignalPool::setName().
Referenced by addSignals(), and setSignals().
{
AbstractSignalGroup::setName(n);
_signals.setName(n);
}
| void GeopsyCore::SignalGroup::setSignals | ( | const SubSignalPool & | subPool | ) | [virtual] |
Sets contents of the group from subpool.
References GeopsyCore::AbstractSignalGroup::name(), GeopsyCore::SubSignalPool::name(), GeopsyCore::AbstractSignalGroup::setModified(), setName(), GeopsyCore::SubSignalPool::setName(), subPool(), and TRACE.
Referenced by GeopsyMainWindow::createNewGroup().
| int GeopsyCore::SignalGroup::signalCount | ( | ) | const [inline, virtual] |
Returns the number of signals.
Reimplemented from GeopsyCore::AbstractSignalGroup.
{return _signals.count();}
| virtual SubSignalPool GeopsyCore::SignalGroup::subPool | ( | ) | const [inline, virtual] |
Returns the list of signals contained in all its children.
Returns the list of signals of this group.
Reimplemented from GeopsyCore::AbstractSignalGroup.
Referenced by GeopsyCore::StationGroup::name(), and setSignals().
{return _signals;}
| bool GeopsyCore::SignalGroup::xml_inherits | ( | const QString & | tagName | ) | const [virtual] |
May be useful for classes that do not inherit QObject. Must be re-implemented in sub-classes
Reimplemented from QGpCoreTools::XMLClass.
Reimplemented in GeopsyCore::StationGroup.
References xmlSignalGroupTag.
{
if(tagName==xmlSignalGroupTag) {
return true;
} else {
return AbstractSignalGroup::xml_inherits(tagName);
}
}
| XMLMember GeopsyCore::SignalGroup::xml_member | ( | XML_MEMBER_ARGS | ) | [protected, virtual] |
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:
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 GeopsyCore::AbstractSignalGroup.
References TRACE.
{
TRACE;
if(tag=="ids") return XMLMember(0);
return AbstractSignalGroup::xml_member(tag, attributes, context)+1;
}
| bool GeopsyCore::SignalGroup::xml_setProperty | ( | XML_SETPROPERTY_ARGS | ) | [protected, virtual] |
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 GeopsyCore::AbstractSignalGroup.
References QGpCoreTools::StringSection::isValid(), QGpCoreTools::StringSection::nextField(), QGpCoreTools::StringSection::toInt(), and TRACE.
{
TRACE;
switch (memberID) {
case 0: {
if(!_ids) { // Multiple <ids> tags are merge together
_ids=new QVector<int>;
}
static const QString sep=" \n\t\r";
const QChar * ptr=0;
StringSection f=content.nextField(ptr, sep, true);
while(f.isValid()) {
_ids->append(f.toInt());
f=content.nextField(ptr, sep, true);
}
return true;
}
default:
return AbstractSignalGroup::xml_setProperty(memberID-1, tag, attributes, content, context);
}
}
| virtual const QString& GeopsyCore::SignalGroup::xml_tagName | ( | ) | const [inline, virtual] |
Reimplemented from QGpCoreTools::TreeItem.
Reimplemented in GeopsyCore::StationGroup.
{return xmlSignalGroupTag;}
| void GeopsyCore::SignalGroup::xml_writeProperties | ( | XML_WRITEPROPERTIES_ARGS | ) | const [protected, virtual] |
Reimplemented from GeopsyCore::AbstractSignalGroup.
References GeopsyCore::SubSignalPool::begin(), GeopsyCore::SubSignalPool::end(), str, TRACE, and QGpCoreTools::XMLClass::writeProperty().
{
TRACE;
AbstractSignalGroup::xml_writeProperties(s, context);
QString str;
for(SubSignalPool::const_iterator it=_signals.begin(); it!=_signals.end(); ++it) {
str+=QString::number((*it)->id())+" ";
}
writeProperty(s, "ids", str);
}
const QString GeopsyCore::SignalGroup::xmlSignalGroupTag = "Group" [static] |
Referenced by xml_inherits().