Finish 1.4.124

This commit is contained in:
Arin Alexander 2019-03-04 22:37:21 +03:00
commit a5a70f3a02
7 changed files with 77 additions and 34 deletions

View File

@ -77,7 +77,7 @@ RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc
LIMEREPORT_VERSION_MAJOR = 1 LIMEREPORT_VERSION_MAJOR = 1
LIMEREPORT_VERSION_MINOR = 4 LIMEREPORT_VERSION_MINOR = 4
LIMEREPORT_VERSION_RELEASE = 123 LIMEREPORT_VERSION_RELEASE = 124
LIMEREPORT_VERSION = '\\"$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}\\"' LIMEREPORT_VERSION = '\\"$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}\\"'
DEFINES += LIMEREPORT_VERSION_STR=\"$${LIMEREPORT_VERSION}\" DEFINES += LIMEREPORT_VERSION_STR=\"$${LIMEREPORT_VERSION}\"
@ -103,5 +103,3 @@ lessThan(QT_MAJOR_VERSION, 5){
DEFINES += HAVE_UI_LOADER DEFINES += HAVE_UI_LOADER
} }
} }

View File

@ -379,10 +379,23 @@ int BandDesignIntf::maxChildIndex(QSet<BandDesignIntf::BandsType> ignoredBands)
return curIndex; return curIndex;
} }
int BandDesignIntf::rootIndex(BandDesignIntf* parentBand)
{
return rootBand(parentBand)->bandIndex();
}
BandDesignIntf *BandDesignIntf::rootBand(BandDesignIntf* parentBand)
{
BandDesignIntf* currentBand = this;
while (currentBand->parentBand() && currentBand->parentBand() != parentBand)
currentBand = currentBand->parentBand();
return currentBand;
}
int BandDesignIntf::minChildIndex(BandDesignIntf::BandsType bandType){ int BandDesignIntf::minChildIndex(BandDesignIntf::BandsType bandType){
int curIndex = bandIndex(); int curIndex = bandIndex();
foreach(BandDesignIntf* childBand, childBands()){ foreach(BandDesignIntf* childBand, childBands()){
if (curIndex>childBand->bandIndex() && (childBand->bandType()>bandType)){ if (curIndex > childBand->bandIndex() && (childBand->bandType() > bandType)){
curIndex = childBand->bandIndex(); curIndex = childBand->bandIndex();
} }
} }
@ -394,7 +407,7 @@ int BandDesignIntf::minChildIndex(QSet<BandDesignIntf::BandsType> ignoredBands)
int curIndex = bandIndex(); int curIndex = bandIndex();
foreach(BandDesignIntf* childBand, childBands()){ foreach(BandDesignIntf* childBand, childBands()){
if (!ignoredBands.contains(childBand->bandType()) && childBand->bandIndex() < bandIndex()){ if (!ignoredBands.contains(childBand->bandType()) && childBand->bandIndex() < bandIndex()){
curIndex = std::min(curIndex, childBand->maxChildIndex(ignoredBands)); curIndex = std::min(curIndex, childBand->minChildIndex(ignoredBands));
} }
} }
return curIndex; return curIndex;

View File

@ -171,6 +171,8 @@ public:
int maxChildIndex(BandDesignIntf::BandsType bandType) const; int maxChildIndex(BandDesignIntf::BandsType bandType) const;
int maxChildIndex(QSet<BandsType> ignoredBands = QSet<BandDesignIntf::BandsType>()) const; int maxChildIndex(QSet<BandsType> ignoredBands = QSet<BandDesignIntf::BandsType>()) const;
int rootIndex(BandDesignIntf *parentBand);
BandDesignIntf* rootBand(BandDesignIntf *parentBand);
BandDesignIntf* parentBand() const {return m_parentBand;} BandDesignIntf* parentBand() const {return m_parentBand;}

View File

@ -2284,15 +2284,20 @@ CommandIf::Ptr BandMoveFromToCommand::create(PageDesignIntf* page, int from, int
bool BandMoveFromToCommand::doIt() bool BandMoveFromToCommand::doIt()
{ {
if (page() && from != to) { if (page() && from != to) {
page()->pageItem()->moveBandFromTo(from, to); BandDesignIntf* fromBand = page()->pageItem()->bandByIndex(from);
return true; reverceTo = fromBand->minChildIndex();
if (fromBand){
page()->pageItem()->moveBandFromTo(from, to);
reverceFrom = fromBand->bandIndex();
return true;
}
} }
return false; return false;
} }
void BandMoveFromToCommand::undoIt() void BandMoveFromToCommand::undoIt()
{ {
if (page()) page()->pageItem()->moveBandFromTo(to, from); if (page()) page()->pageItem()->moveBandFromTo(reverceFrom, reverceTo);
} }
} }

View File

@ -433,6 +433,8 @@ namespace LimeReport {
private: private:
int from; int from;
int to; int to;
int reverceFrom;
int reverceTo;
}; };

View File

@ -621,47 +621,68 @@ void PageItemDesignIntf::swapBands(BandDesignIntf* band, BandDesignIntf* bandToS
} }
QList<BandDesignIntf*> PageItemDesignIntf::createBandGroup(int beginIndex, int endIndex)
{
QList<BandDesignIntf*> result;
foreach(BandDesignIntf* curBand, m_bands){
if ( curBand->bandIndex() >= beginIndex && curBand->bandIndex() <= endIndex)
result.append(curBand);
}
qSort(result.begin(), result.end(), bandIndexLessThen);
return result;
}
void PageItemDesignIntf::moveBandFromTo(int from, int to) void PageItemDesignIntf::moveBandFromTo(int from, int to)
{ {
BandDesignIntf* firstBand = 0;
BandDesignIntf* secondBand = 0;
int firstIndex = std::min(from,to); BandDesignIntf* fromBand = 0;
int secondIndex = std::max(from,to); BandDesignIntf* toBand = 0;
QList<BandDesignIntf*> bandsToMove;
int moveIndex = 0;
foreach(BandDesignIntf* band, bands()){ foreach(BandDesignIntf* band, bands()){
if (band->bandIndex() == from){ if (band->bandIndex() == from){
firstBand = band; fromBand = band->rootBand(band->parentBand());
} }
if (band->bandIndex() == to){ if (band->bandIndex() == to){
secondBand = band; toBand = band->rootBand(band->parentBand());
bandsToMove.append(band);
} }
if (fromBand && toBand) break;
} }
foreach(BandDesignIntf* curBand, m_bands){ if (!fromBand || !toBand) return;
if ( curBand->bandIndex() > firstIndex && curBand->bandIndex() < secondIndex &&
curBand->bandType() == firstBand->bandType() &&
curBand != firstBand
)
bandsToMove.append(curBand);
}
qSort(bandsToMove.begin(), bandsToMove.end(), bandIndexLessThen);
int beginIndex = 0;
if (from > to){ int endIndex = 0;
firstBand->changeBandIndex(secondBand->minChildIndex(), true); if (from < to){
moveIndex = firstBand->maxChildIndex()+1; beginIndex = fromBand->maxChildIndex()+1;
endIndex = toBand->maxChildIndex();
} else { } else {
moveIndex = firstBand->minChildIndex(); beginIndex = toBand->minChildIndex();
firstBand->changeBandIndex(secondBand->minChildIndex(), true); endIndex = fromBand->minChildIndex()-1;
} }
foreach(BandDesignIntf* curBand, bandsToMove){ QList<BandDesignIntf*> firstGroup = createBandGroup(fromBand->minChildIndex(), fromBand->maxChildIndex());
curBand->changeBandIndex(moveIndex,true); QList<BandDesignIntf*> secondGroup = createBandGroup(beginIndex, endIndex);
moveIndex = curBand->maxChildIndex() + 1;
if (from < to){
int currentIndex = fromBand->minChildIndex();
foreach(BandDesignIntf* band, secondGroup){
band->setBandIndex(currentIndex);
currentIndex++;
}
foreach(BandDesignIntf* band, firstGroup){
band->setBandIndex(currentIndex);
currentIndex++;
}
} else {
int currentIndex = toBand->minChildIndex();
foreach(BandDesignIntf* band, firstGroup){
band->setBandIndex(currentIndex);
currentIndex++;
}
foreach(BandDesignIntf* band, secondGroup){
band->setBandIndex(currentIndex);
currentIndex++;
}
} }
relocateBands(); relocateBands();

View File

@ -128,6 +128,8 @@ public:
void swapBands(BandDesignIntf *band, BandDesignIntf *bandToSwap); void swapBands(BandDesignIntf *band, BandDesignIntf *bandToSwap);
void moveBandFromTo(int from, int to); void moveBandFromTo(int from, int to);
QList<BandDesignIntf *> createBandGroup(int beginIndex, int endIndex);
protected slots: protected slots:
void bandDeleted(QObject* band); void bandDeleted(QObject* band);
void bandPositionChanged(QObject* object, QPointF newPos, QPointF oldPos); void bandPositionChanged(QObject* object, QPointF newPos, QPointF oldPos);