Added per user chart

This commit is contained in:
2020-03-07 17:53:15 +01:00
parent a79718f244
commit eef6347078
9 changed files with 85 additions and 3 deletions

View File

@@ -6,6 +6,7 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000
SOURCES += main.cpp \
chartperstory.cpp \
chartperuser.cpp \
donutbreakdownchart.cpp \
flowlayout.cpp \
mainslice.cpp \
@@ -19,6 +20,7 @@ FORMS += \
HEADERS += \
chartperstory.h \
chartperuser.h \
donutbreakdownchart.h \
flowlayout.h \
mainslice.h \

35
chartperuser.cpp Normal file
View File

@@ -0,0 +1,35 @@
#include "chartperuser.h"
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QGraphicsLayout>
QT_CHARTS_USE_NAMESPACE
ChartPerUser::ChartPerUser(QWidget *parent) :
QChartView{parent}
{
setRenderHint(QPainter::Antialiasing);
}
void ChartPerUser::setPoints(const QMap<QString, int> &points)
{
auto chart = new QChart;
chart->layout()->setContentsMargins(0, 0, 0, 0);
chart->setBackgroundRoundness(0);
chart->setTitle("Story points per owner");
chart->legend()->setAlignment(Qt::AlignBottom);
auto series = new QBarSeries();
for (auto iter = std::begin(points); iter != std::end(points); iter++)
{
auto set = new QBarSet(iter.key());
*set << iter.value();
series->append(set);
}
chart->addSeries(series);
setChart(chart);
delete m_chart;
m_chart = chart;
}

20
chartperuser.h Normal file
View File

@@ -0,0 +1,20 @@
#pragma once
#include <QtCharts/QChartView>
QT_CHARTS_BEGIN_NAMESPACE
class QChart;
QT_CHARTS_END_NAMESPACE
class ChartPerUser : public QtCharts::QChartView
{
Q_OBJECT
public:
explicit ChartPerUser(QWidget *parent = nullptr);
void setPoints(const QMap<QString, int> &points);
private:
QtCharts::QChart *m_chart{};
};

View File

@@ -8,7 +8,10 @@ MainWindow::MainWindow(QWidget *parent) :
m_ui->setupUi(this);
connect(m_ui->stripsGrid, &StripsGrid::pointsPerStoryChanged, m_ui->chartPerStory, &ChartPerStory::setPoints);
connect(m_ui->stripsGrid, &StripsGrid::pointsPerUserChanged, m_ui->chartPerUser, &ChartPerUser::setPoints);
m_ui->chartPerStory->setPoints(m_ui->stripsGrid->pointsPerStory());
m_ui->chartPerUser->setPoints(m_ui->stripsGrid->pointsPerUser());
for (QDockWidget *dockWidget : findChildren<QDockWidget*>())
{

View File

@@ -22,8 +22,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>739</width>
<height>558</height>
<width>734</width>
<height>544</height>
</rect>
</property>
</widget>
@@ -34,7 +34,7 @@
<x>0</x>
<y>0</y>
<width>800</width>
<height>18</height>
<height>27</height>
</rect>
</property>
<widget class="QMenu" name="menu_File">
@@ -61,6 +61,12 @@
</attribute>
<widget class="ChartPerStory" name="chartPerStory"/>
</widget>
<widget class="QDockWidget" name="dockWidget_2">
<attribute name="dockWidgetArea">
<number>1</number>
</attribute>
<widget class="ChartPerUser" name="chartPerUser"/>
</widget>
<action name="action_Quit">
<property name="text">
<string>&amp;Quit</string>
@@ -79,6 +85,12 @@
<header>chartperstory.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>ChartPerUser</class>
<extends>QWidget</extends>
<header>chartperuser.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections>

View File

@@ -93,6 +93,7 @@ StripsGrid::StripsGrid(QWidget *parent) :
widget->setPoints(std::array<int, 5>{1,3,5,8,13}[random.bounded(5)]);
widget->setOwner(std::array<const char *, 5>{"DB", "KW", "BK", "MS", "AS"}[random.bounded(5)]);
connect(widget, &StripWidget::pointsChanged, this, &StripsGrid::updatePoints);
connect(widget, &StripWidget::ownerChanged, this, &StripsGrid::updatePoints);
test.layout->addWidget(widget);
test.widgets.push_back(widget);
});
@@ -211,6 +212,7 @@ void StripsGrid::updatePoints()
{
std::array<int, 5> sumsPerColumn{0,0,0,0,0};
m_pointsPerStory.clear();
m_pointsPerUser.clear();
for (const auto &story : m_stories)
{
@@ -225,6 +227,8 @@ void StripsGrid::updatePoints()
{
columnSum += widget->points();
test[widget->title()] = widget->points();
m_pointsPerUser[widget->owner()] += widget->points();
}
sumsPerColumn[i+1] += columnSum;
storyPoints += columnSum;
@@ -245,4 +249,5 @@ void StripsGrid::updatePoints()
m_tableHeader[i]->setText(texts[i].arg(sumsPerColumn[i]));
emit pointsPerStoryChanged(m_pointsPerStory);
emit pointsPerUserChanged(m_pointsPerUser);
}

View File

@@ -19,9 +19,11 @@ public:
explicit StripsGrid(QWidget *parent = nullptr);
const auto &pointsPerStory() const { return m_pointsPerStory; }
const auto &pointsPerUser() const { return m_pointsPerUser; }
signals:
void pointsPerStoryChanged(const QMap<QString, QMap<QString, int> > &pointsPerStory);
void pointsPerUserChanged(const QMap<QString, int> &pointsPerUser);
protected:
void mousePressEvent(QMouseEvent *event) override;
@@ -54,4 +56,5 @@ private:
std::vector<Story> m_stories;
QMap<QString, QMap<QString, int> > m_pointsPerStory;
QMap<QString, int> m_pointsPerUser;
};

View File

@@ -15,6 +15,7 @@ StripWidget::StripWidget(QWidget *parent) :
setFixedSize(size());
connect(m_ui->points, &QSpinBox::valueChanged, this, &StripWidget::pointsChanged);
connect(m_ui->owner, &QComboBox::currentText, this, &StripWidget::ownerChanged);
}
StripWidget::StripWidget(StripWidget::Story_t, QWidget *parent) :

View File

@@ -46,6 +46,7 @@ public:
signals:
void pointsChanged(int points);
void ownerChanged(const QString &owner);
private:
std::unique_ptr<Ui::StripWidget> m_ui;