diff --git a/src/barchart/barchartseries.cpp b/src/barchart/barchartseries.cpp index a5011da..3dc1a1b 100644 --- a/src/barchart/barchartseries.cpp +++ b/src/barchart/barchartseries.cpp @@ -54,7 +54,7 @@ int BarChartSeries::max() } -int BarChartSeries::countSeries() +int BarChartSeries::countRows() { return mModel->rowCount(); } diff --git a/src/barchart/barchartseries.h b/src/barchart/barchartseries.h index b43cbc3..7fa5cab 100644 --- a/src/barchart/barchartseries.h +++ b/src/barchart/barchartseries.h @@ -27,7 +27,7 @@ public: // Methods to find out minimum and maximum values of data int min(); int max(); - int countSeries(); + int countRows(); int countColumns(); // Count items in one series. int countTotalItems(); int valueAt(int row, int column); diff --git a/src/barchart/bargroup.cpp b/src/barchart/bargroup.cpp index 7d191f3..984af6b 100644 --- a/src/barchart/bargroup.cpp +++ b/src/barchart/bargroup.cpp @@ -95,32 +95,64 @@ void BarGroup::layoutChanged() { // Scale bars to new layout // Layout for bars: - if (mSeries.countSeries() <= 0) { + if (mSeries.countRows() <= 0) { // Nothing to do. return; } // TODO: better way to auto-layout - int count = mSeries.countColumns(); - int posStep = (mWidth / (count+1)); - int startPos = (mWidth / (count+1)) - mSeries.countSeries() * mBarDefaultWidth /2; - qDebug() << "startpos" << startPos; + // Use reals for accurancy (we might get some compiler warnings... :) + int columnCount = mSeries.countColumns(); + int rowCount = mSeries.countRows(); + qreal tW = mWidth; + qreal tH = mHeight; + qreal tM = mMax; + qreal scale = (tH/tM); + + qreal tC = columnCount+1; + qreal xStepPerSeries = (tW/tC); + + //qint startPos = (mWidth / (count+1)) - mSeries.countSeries() * mBarDefaultWidth /2; +// qDebug() << "XPOS:" << xPos; + + qDebug() << "XSTEP:" << xStepPerSeries; + + // TODO: Correct the calculations... // Scaling. int itemIndex(0); - for (int series = 0; series < mSeries.countSeries(); series++) { + for (int column=0; column < columnCount; column++) { + qreal xPos = xStepPerSeries * column + ((tW + mBarDefaultWidth*rowCount)/(columnCount*2)); + qDebug() << "XPOS:" << xPos; + for (int row = 0; row < rowCount; row++) { + qreal barHeight = mSeries.valueAt(row, column) * scale; + Bar* bar = reinterpret_cast (childItems().at(itemIndex)); + + // TODO: width settable per bar? + bar->resize(mBarDefaultWidth, barHeight); + bar->setColor(mColors.at(row)); + bar->setPos(xPos, mHeight); // item*posStep+startPos + series * mBarDefaultWidth, mHeight); + itemIndex++; + xPos += mBarDefaultWidth; + } + } + + /* + for (int series = 0; series < mSeries.countRows(); series++) { for (int item=0; item < mSeries.countColumns(); item++) { - qDebug() << itemIndex; - int barHeight = mSeries.valueAt(series, item) * mHeight / mMax; + qreal barHeight = mSeries.valueAt(series, item) * scale; Bar* bar = reinterpret_cast (childItems().at(itemIndex)); // TODO: width settable per bar? bar->resize(mBarDefaultWidth, barHeight); bar->setColor(mColors.at(series)); - bar->setPos(item*posStep+startPos + series * mBarDefaultWidth, mHeight); + bar->setPos(xPos, mHeight); // item*posStep+startPos + series * mBarDefaultWidth, mHeight); itemIndex++; + xPos += mBarDefaultWidth; } + xPos = xStepPerSeries * series; } + */ mLayoutDirty = true; } diff --git a/src/barchart/stackedbargroup.cpp b/src/barchart/stackedbargroup.cpp index 1aec87f..6ce7844 100644 --- a/src/barchart/stackedbargroup.cpp +++ b/src/barchart/stackedbargroup.cpp @@ -101,7 +101,7 @@ void StackedBarGroup::layoutChanged() } // TODO: better way to auto-layout - // Use reals for accurancy (implicit casting here, we get a warning) + // Use reals for accurancy (we might get some compiler warnings... :) qreal maxSum = mSeries.maxColumnSum(); qreal h = mHeight; qreal scale = (h / maxSum);