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

Brief description of class still missing. More...

#include <SignalGroupItem.h>

Inheritance diagram for GeopsyGui::SignalGroupItem:
MonoStation::CategoryGroupItem SubtractGroupItem

List of all members.

Public Member Functions

virtual int columnCount (const QModelIndex &parent=QModelIndex()) const
virtual QVariant data (const QModelIndex &index, int role) const
virtual bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
virtual Qt::ItemFlags flags (const QModelIndex &) const
void getSelection (SubSignalPool &sel, const QItemSelectionModel &sm, const QModelIndex &parent=QModelIndex())
void getSelection (QList< AbstractSignalGroup * > &sel, const QItemSelectionModel &sm, const QModelIndex &parent=QModelIndex())
virtual QModelIndex index (int row, int column, const QModelIndex &parent=QModelIndex()) const
QModelIndex index (AbstractSignalGroup *g) const
virtual QMimeData * mimeData (const QModelIndexList &indexes) const
virtual QStringList mimeTypes () const
virtual QModelIndex parent (const QModelIndex &index) const
virtual int rowCount (const QModelIndex &parent=QModelIndex()) const
virtual bool setData (const QModelIndex &index, const QVariant &value, int role=Qt::EditRole)
void setDatabase (SignalDB *db)
 SignalGroupItem (QObject *parent=0)
virtual Qt::DropActions supportedDropActions () const
 ~SignalGroupItem ()

Static Public Member Functions

static AbstractSignalGroupgroup (const QModelIndex &index)

Protected Attributes

SignalDB_db

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing

References _db, and TRACE.

    : QAbstractItemModel(parent)
{
  TRACE;
  _db=0;
}

Description of destructor still missing

{}

Member Function Documentation

int GeopsyGui::SignalGroupItem::columnCount ( const QModelIndex &  parent = QModelIndex()) const [virtual]

Currently returns only 1 but may evolve in the future

References TRACE.

{
  TRACE;
  return 1;
}
QVariant GeopsyGui::SignalGroupItem::data ( const QModelIndex &  index,
int  role 
) const [virtual]

References GeopsyCore::AbstractSignalGroup::comments(), GeopsyCore::SubSignalPool::count(), group(), GeopsyCore::AbstractSignalGroup::hasOwnSignal(), GeopsyCore::AbstractSignalGroup::icon(), GeopsyCore::AbstractSignalGroup::name(), GeopsyCore::AbstractSignalGroup::subPool(), QGpCoreTools::tr(), TRACE, and QGpCoreTools::XMLClass::xml_inherits().

{
  TRACE;
  if( !index.isValid()) return QVariant();
  AbstractSignalGroup * g=group(index);
  switch (role) {
  case Qt::DisplayRole:
    return g->name();
  case Qt::ToolTipRole: {
      const QString& c=g->comments();
      if(c.isEmpty()) {
        return tr("%1 signal(s)").arg(g->subPool().count());
      } else {
        return c;
      }
    }
    break;
  case Qt::DecorationRole: {
      const QIcon * i=g->icon();
      if(i) {
        return *i;
      } else {
        // These basic group classes do not provide a QIcon
        if(g->xml_inherits(StationGroup::xmlStationGroupTag)) {
          static const QIcon stationIcon(":/images/station_20x20.png");
          return stationIcon;
        } else if(g->hasOwnSignal()){
          static const QIcon signalIcon(":/images/signal_20x20.png");
          return signalIcon;
        } else {
          static const QIcon folderIcon(":/images/folder_20x20.png");
          return folderIcon;
        }
      }
    }
    break;
  default:
    return QVariant();
  }
}
bool GeopsyGui::SignalGroupItem::dropMimeData ( const QMimeData *  data,
Qt::DropAction  action,
int  row,
int  column,
const QModelIndex &  parent 
) [virtual]

References group(), QGpCoreTools::TreeContainer::rank(), GeopsyCore::AbstractSignalGroup::setParent(), QGpCoreTools::TreeContainer::setRank(), and TRACE.

{
  TRACE;
  Q_UNUSED(column);
  if(action==Qt::MoveAction) {
    QByteArray encodedData=data->data("geopsy/x-groups");
    QDataStream stream(&encodedData, QIODevice::ReadOnly);
    while(!stream.atEnd()) {
      AbstractSignalGroup * g;
      stream >> (quint64&)g;
      g->setParent(group(parent));
      int r=g->rank();
      if(row>-1 && r!=row) { // Occurs when moving to new parent
        beginMoveRows(parent, r, r, parent, row);
        g->setRank(row);
        endMoveRows();
      }
    }
  }
  return true;
}
Qt::ItemFlags GeopsyGui::SignalGroupItem::flags ( const QModelIndex &  index) const [virtual]

Reimplemented in MonoStation::CategoryGroupItem, and SubtractGroupItem.

References group(), GeopsyCore::AbstractSignalGroup::readOnly(), GeopsyCore::AbstractSignalGroup::readOnlyChildren(), and TRACE.

{
  TRACE;
  if(index.isValid()) {
    AbstractSignalGroup * g=group(index);
    if(g->readOnly()) {
      if(g->readOnlyChildren()) {
        return Qt::ItemIsSelectable |
               Qt::ItemIsEnabled;
      } else {
        return Qt::ItemIsSelectable |
               Qt::ItemIsEnabled |
               Qt::ItemIsDropEnabled;
      }
    } else {
      return Qt::ItemIsSelectable |
             Qt::ItemIsEnabled |
             Qt::ItemIsEditable |
             Qt::ItemIsDragEnabled |
             Qt::ItemIsDropEnabled;
    }
  } else {
    return 0;
  }
}
void GeopsyGui::SignalGroupItem::getSelection ( SubSignalPool sel,
const QItemSelectionModel &  sm,
const QModelIndex &  parent = QModelIndex() 
)

References GeopsyCore::SubSignalPool::addGroup(), group(), index(), rowCount(), and TRACE.

Referenced by GroupView::getSelection(), and getSelection().

{
  TRACE;
  int n=rowCount(parent);
  for(int i=0;i < n;i++ ) {
    QModelIndex mi=index(i, 0, parent);
    if(sm.isSelected(mi)) { // No need to go through tree because addGroup will do it for us
      sel.addGroup(group(mi));
    } else {
      getSelection(sel, sm, mi);
    }
  }
}
void GeopsyGui::SignalGroupItem::getSelection ( QList< AbstractSignalGroup * > &  sel,
const QItemSelectionModel &  sm,
const QModelIndex &  parent = QModelIndex() 
)

References getSelection(), group(), index(), rowCount(), and TRACE.

{
  TRACE;
  int n=rowCount(parent);
  for(int i=0;i < n;i++ ) {
    QModelIndex mi=index(i, 0, parent);
    if(sm.isSelected(mi)) {
      sel.append(group(mi));
    }
    getSelection(sel, sm, mi);
  }
}
AbstractSignalGroup * GeopsyGui::SignalGroupItem::group ( const QModelIndex &  index) [static]
QModelIndex GeopsyGui::SignalGroupItem::index ( int  row,
int  column,
const QModelIndex &  parent = QModelIndex() 
) const [virtual]

References _db, group(), GeopsyCore::SignalDB::masterGroup(), and TRACE.

Referenced by getSelection(), mimeData(), and GroupProperties::setValues().

{
  TRACE;
  if(!parent.isValid()) {
    if(_db) {
      return createIndex(row, column, static_cast<AbstractSignalGroup *>(_db->masterGroup()));
    } else {
      return QModelIndex();
    }
  } else {
    return createIndex(row, column, group(parent)->childAt(row));
  }
}

References parent(), GeopsyCore::AbstractSignalGroup::parent(), QGpCoreTools::TreeContainer::rank(), and TRACE.

{
  TRACE;
  AbstractSignalGroup * parent=g->parent();
  if(parent) {
    return createIndex(parent->rank(g), 0, g);
  } else {
    return createIndex(0, 0, g);
  }
}
QMimeData * GeopsyGui::SignalGroupItem::mimeData ( const QModelIndexList &  indexes) const [virtual]

References group(), index(), GeopsyCore::AbstractSignalGroup::readOnly(), and TRACE.

{
  TRACE;
  QMimeData *mimeData=new QMimeData();
  QByteArray encodedData;
  QDataStream stream(&encodedData, QIODevice::WriteOnly);

  foreach(QModelIndex index, indexes) {
    if (index.isValid()) {
      AbstractSignalGroup * g=group(index);
      if(!g->readOnly()) {
        stream << (quint64)g;
      }
    }
  }
  mimeData->setData("geopsy/x-groups", encodedData);
  return mimeData;
}
QStringList GeopsyGui::SignalGroupItem::mimeTypes ( ) const [virtual]

References TRACE.

{
  TRACE;
  QStringList types;
  types << "geopsy/x-groups";
  return types;
}
QModelIndex GeopsyGui::SignalGroupItem::parent ( const QModelIndex &  index) const [virtual]

References group(), GeopsyCore::AbstractSignalGroup::parent(), QGpCoreTools::TreeContainer::rank(), and TRACE.

Referenced by index().

{
  TRACE;
  if(!index.isValid()) return QModelIndex();
  AbstractSignalGroup * g=group(index);
  AbstractSignalGroup * parent=g->parent();
  if(parent) {
    AbstractSignalGroup * grandParent=parent->parent();
    if(grandParent) {
      return createIndex(grandParent->rank(parent), 0, parent);
    } else {
      return createIndex(0, 0, parent);
    }
  } else {
    return QModelIndex();
  }
}
int GeopsyGui::SignalGroupItem::rowCount ( const QModelIndex &  parent = QModelIndex()) const [virtual]

References QGpCoreTools::TreeContainer::childrenCount(), group(), and TRACE.

Referenced by getSelection().

{
  TRACE;
  if(!parent.isValid()) {
    return 1;
  } else {
    return group(parent)->childrenCount();
  }
}
bool GeopsyGui::SignalGroupItem::setData ( const QModelIndex &  index,
const QVariant &  value,
int  role = Qt::EditRole 
) [virtual]

References group(), GeopsyCore::AbstractSignalGroup::readOnly(), GeopsyCore::AbstractSignalGroup::setName(), and TRACE.

{
  TRACE;
  if( !index.isValid()) return false;
  AbstractSignalGroup * g=group(index);
  switch (role) {
  case Qt::EditRole:
    if(g->readOnly()) {
      return false;
    } else {
      g->setName(value.toString());
      return true;
    }
    break;

  default:
    return false;
  }
}

References _db, GeopsyCore::SignalDB::masterGroup(), and TRACE.

Referenced by GroupProperties::GroupProperties(), MonoStation::WinResults::groupsToCategories(), GroupView::GroupView(), and SubtractSignals::setSubPool().

{
  TRACE;
  if(_db!=db) {
    _db=db;
    MasterSignalGroup * m=_db->masterGroup();
    connect(m, SIGNAL(destroyed()), this, SLOT(databaseDestroyed()));
    connect(m, SIGNAL(dataChanged(AbstractSignalGroup*)),
            this, SLOT(dataChanged(AbstractSignalGroup*)));
    connect(m, SIGNAL(parentAboutToBeChanged(AbstractSignalGroup*,AbstractSignalGroup*)),
            this, SLOT(parentAboutToBeChanged(AbstractSignalGroup*,AbstractSignalGroup*)));
    connect(m, SIGNAL(parentChanged(AbstractSignalGroup*,AbstractSignalGroup*)),
            this, SLOT(parentChanged(AbstractSignalGroup*,AbstractSignalGroup*)));
  }
  reset();
}
Qt::DropActions GeopsyGui::SignalGroupItem::supportedDropActions ( ) const [virtual]

References TRACE.

{
  TRACE;
  return Qt::MoveAction;
}

Member Data Documentation

Referenced by index(), setDatabase(), and SignalGroupItem().


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