void PaintWidget::group() { if( !canGroup() ) return; GContainer *c = new GContainer; c->QObject::setObjectName( "New group" ); int count = painter.layers[painter.currentLayer]->countObjects(); for( int i = count - 1; i >= 0; i-- ) { if( painter.selection.isInside( painter.layers[painter.currentLayer]->object( i ) ) ) c->add( painter.layers[painter.currentLayer]->object( i ), true ); } count = painter.selection.countSelected(); for( int i = 0; i < count; i++ ) { painter.layers[painter.currentLayer]->remove( painter.layers[painter.currentLayer]->objectIndex( GOBJECT(painter.selection.selected( i )) ) ); } painter.selection.setSelected( c ); painter.layers[painter.currentLayer]->add( c, true ); emit allLayersChanged(); painter.update(); emit StateChanged("Group"); }
void FxSelection::visitFx(TFx *fx, QList<TFx *> &visitedFxs) { if (visitedFxs.contains(fx)) return; TZeraryColumnFx *zfx = dynamic_cast<TZeraryColumnFx *>(fx); if (zfx) fx = zfx->getZeraryFx(); if (!canGroup(fx)) return; visitedFxs.append(fx); int i; for (i = 0; i < fx->getInputPortCount(); i++) { TFx *inputFx = fx->getInputPort(i)->getFx(); TZeraryColumnFx *onputZFx = dynamic_cast<TZeraryColumnFx *>(inputFx); if (onputZFx) inputFx = onputZFx->getZeraryFx(); if (!inputFx) continue; bool canBeGrouped = !inputFx->getAttributes()->isGrouped() || (inputFx->getAttributes()->getEditingGroupId() == fx->getAttributes()->getEditingGroupId()); if (!visitedFxs.contains(inputFx) && isSelected(inputFx) && canBeGrouped) visitFx(inputFx, visitedFxs); } if (zfx) fx = zfx; if (fx->isZerary() && !zfx) { TXsheet *xsh = m_xshHandle->getXsheet(); int columnCount = xsh->getColumnCount(); int j; for (j = 0; j < columnCount; j++) { TZeraryColumnFx *zerary = dynamic_cast<TZeraryColumnFx *>(xsh->getColumn(j)->getFx()); if (zerary && zerary->getZeraryFx() == fx) { fx = zerary; break; } } } for (i = 0; i < fx->getOutputConnectionCount(); i++) { TFx *outputFx = fx->getOutputConnection(i)->getOwnerFx(); if (!outputFx) continue; bool canBeGrouped = !outputFx->getAttributes()->isGrouped() || (outputFx->getAttributes()->getEditingGroupId() == fx->getAttributes()->getEditingGroupId()); if (!visitedFxs.contains(outputFx) && isSelected(outputFx) && canBeGrouped) visitFx(outputFx, visitedFxs); } }
bool GroupBy::findNext(RecordKeyVector &hits) { //get one record. if (_prevRecord == NULL) { return false; } assignPrevFields(); hits.setKey(_prevRecord); hits.push_back(_prevRecord); //key should also be part of group for calculations while (1) { const Record *newRecord = getNextRecord(); if (newRecord == NULL) { _prevRecord = NULL; break; } else if (canGroup(newRecord)) { hits.push_back(newRecord); } else { _prevRecord = newRecord; break; } } return true; }