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 \
|
||||
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
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);
|
||||
|
||||
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*>())
|
||||
{
|
||||
|
@@ -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>&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>
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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) :
|
||||
|
@@ -46,6 +46,7 @@ public:
|
||||
|
||||
signals:
|
||||
void pointsChanged(int points);
|
||||
void ownerChanged(const QString &owner);
|
||||
|
||||
private:
|
||||
std::unique_ptr<Ui::StripWidget> m_ui;
|
||||
|
Reference in New Issue
Block a user