Added per user chart
This commit is contained in:
@@ -6,6 +6,7 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000
|
|||||||
|
|
||||||
SOURCES += main.cpp \
|
SOURCES += main.cpp \
|
||||||
chartperstory.cpp \
|
chartperstory.cpp \
|
||||||
|
chartperuser.cpp \
|
||||||
donutbreakdownchart.cpp \
|
donutbreakdownchart.cpp \
|
||||||
flowlayout.cpp \
|
flowlayout.cpp \
|
||||||
mainslice.cpp \
|
mainslice.cpp \
|
||||||
@@ -19,6 +20,7 @@ FORMS += \
|
|||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
chartperstory.h \
|
chartperstory.h \
|
||||||
|
chartperuser.h \
|
||||||
donutbreakdownchart.h \
|
donutbreakdownchart.h \
|
||||||
flowlayout.h \
|
flowlayout.h \
|
||||||
mainslice.h \
|
mainslice.h \
|
||||||
|
35
chartperuser.cpp
Normal file
35
chartperuser.cpp
Normal 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
20
chartperuser.h
Normal 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{};
|
||||||
|
};
|
@@ -8,7 +8,10 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||||||
m_ui->setupUi(this);
|
m_ui->setupUi(this);
|
||||||
|
|
||||||
connect(m_ui->stripsGrid, &StripsGrid::pointsPerStoryChanged, m_ui->chartPerStory, &ChartPerStory::setPoints);
|
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->chartPerStory->setPoints(m_ui->stripsGrid->pointsPerStory());
|
||||||
|
m_ui->chartPerUser->setPoints(m_ui->stripsGrid->pointsPerUser());
|
||||||
|
|
||||||
for (QDockWidget *dockWidget : findChildren<QDockWidget*>())
|
for (QDockWidget *dockWidget : findChildren<QDockWidget*>())
|
||||||
{
|
{
|
||||||
|
@@ -22,8 +22,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>739</width>
|
<width>734</width>
|
||||||
<height>558</height>
|
<height>544</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>800</width>
|
<width>800</width>
|
||||||
<height>18</height>
|
<height>27</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menu_File">
|
<widget class="QMenu" name="menu_File">
|
||||||
@@ -61,6 +61,12 @@
|
|||||||
</attribute>
|
</attribute>
|
||||||
<widget class="ChartPerStory" name="chartPerStory"/>
|
<widget class="ChartPerStory" name="chartPerStory"/>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QDockWidget" name="dockWidget_2">
|
||||||
|
<attribute name="dockWidgetArea">
|
||||||
|
<number>1</number>
|
||||||
|
</attribute>
|
||||||
|
<widget class="ChartPerUser" name="chartPerUser"/>
|
||||||
|
</widget>
|
||||||
<action name="action_Quit">
|
<action name="action_Quit">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Quit</string>
|
<string>&Quit</string>
|
||||||
@@ -79,6 +85,12 @@
|
|||||||
<header>chartperstory.h</header>
|
<header>chartperstory.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>ChartPerUser</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>chartperuser.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
|
@@ -93,6 +93,7 @@ StripsGrid::StripsGrid(QWidget *parent) :
|
|||||||
widget->setPoints(std::array<int, 5>{1,3,5,8,13}[random.bounded(5)]);
|
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)]);
|
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::pointsChanged, this, &StripsGrid::updatePoints);
|
||||||
|
connect(widget, &StripWidget::ownerChanged, this, &StripsGrid::updatePoints);
|
||||||
test.layout->addWidget(widget);
|
test.layout->addWidget(widget);
|
||||||
test.widgets.push_back(widget);
|
test.widgets.push_back(widget);
|
||||||
});
|
});
|
||||||
@@ -211,6 +212,7 @@ void StripsGrid::updatePoints()
|
|||||||
{
|
{
|
||||||
std::array<int, 5> sumsPerColumn{0,0,0,0,0};
|
std::array<int, 5> sumsPerColumn{0,0,0,0,0};
|
||||||
m_pointsPerStory.clear();
|
m_pointsPerStory.clear();
|
||||||
|
m_pointsPerUser.clear();
|
||||||
|
|
||||||
for (const auto &story : m_stories)
|
for (const auto &story : m_stories)
|
||||||
{
|
{
|
||||||
@@ -225,6 +227,8 @@ void StripsGrid::updatePoints()
|
|||||||
{
|
{
|
||||||
columnSum += widget->points();
|
columnSum += widget->points();
|
||||||
test[widget->title()] = widget->points();
|
test[widget->title()] = widget->points();
|
||||||
|
|
||||||
|
m_pointsPerUser[widget->owner()] += widget->points();
|
||||||
}
|
}
|
||||||
sumsPerColumn[i+1] += columnSum;
|
sumsPerColumn[i+1] += columnSum;
|
||||||
storyPoints += columnSum;
|
storyPoints += columnSum;
|
||||||
@@ -245,4 +249,5 @@ void StripsGrid::updatePoints()
|
|||||||
m_tableHeader[i]->setText(texts[i].arg(sumsPerColumn[i]));
|
m_tableHeader[i]->setText(texts[i].arg(sumsPerColumn[i]));
|
||||||
|
|
||||||
emit pointsPerStoryChanged(m_pointsPerStory);
|
emit pointsPerStoryChanged(m_pointsPerStory);
|
||||||
|
emit pointsPerUserChanged(m_pointsPerUser);
|
||||||
}
|
}
|
||||||
|
@@ -19,9 +19,11 @@ public:
|
|||||||
explicit StripsGrid(QWidget *parent = nullptr);
|
explicit StripsGrid(QWidget *parent = nullptr);
|
||||||
|
|
||||||
const auto &pointsPerStory() const { return m_pointsPerStory; }
|
const auto &pointsPerStory() const { return m_pointsPerStory; }
|
||||||
|
const auto &pointsPerUser() const { return m_pointsPerUser; }
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void pointsPerStoryChanged(const QMap<QString, QMap<QString, int> > &pointsPerStory);
|
void pointsPerStoryChanged(const QMap<QString, QMap<QString, int> > &pointsPerStory);
|
||||||
|
void pointsPerUserChanged(const QMap<QString, int> &pointsPerUser);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
@@ -54,4 +56,5 @@ private:
|
|||||||
std::vector<Story> m_stories;
|
std::vector<Story> m_stories;
|
||||||
|
|
||||||
QMap<QString, QMap<QString, int> > m_pointsPerStory;
|
QMap<QString, QMap<QString, int> > m_pointsPerStory;
|
||||||
|
QMap<QString, int> m_pointsPerUser;
|
||||||
};
|
};
|
||||||
|
@@ -15,6 +15,7 @@ StripWidget::StripWidget(QWidget *parent) :
|
|||||||
setFixedSize(size());
|
setFixedSize(size());
|
||||||
|
|
||||||
connect(m_ui->points, &QSpinBox::valueChanged, this, &StripWidget::pointsChanged);
|
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) :
|
StripWidget::StripWidget(StripWidget::Story_t, QWidget *parent) :
|
||||||
|
@@ -46,6 +46,7 @@ public:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void pointsChanged(int points);
|
void pointsChanged(int points);
|
||||||
|
void ownerChanged(const QString &owner);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<Ui::StripWidget> m_ui;
|
std::unique_ptr<Ui::StripWidget> m_ui;
|
||||||
|
Reference in New Issue
Block a user