New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Qt] Add interactive mempool graph #8550

Closed
wants to merge 2 commits into
base: master
from

Conversation

Projects
None yet
@jonasschnelli
Member

jonasschnelli commented Aug 19, 2016

Includes #8501

At the moment, the mempool graph is not very prominently placed (next to the debug window).
bildschirmfoto 2016-08-19 um 21 20 48

Features:

  • interactive graph with options for tx count, dynamic memory usage and minRelayFee/KB
  • collects stats in the background, changing the timespan will directly redraw (unlike our bandwidth graph)
  • Dynamic size drawing, window can be resized
  • The mempool graph is a QWidget which means, it could be placed together with other graphs in a combine multi-graph view (screensaver approach)

bildschirmfoto 2016-08-19 um 21 28 09

@jonasschnelli jonasschnelli added the GUI label Aug 19, 2016

@MarcoFalke

This comment has been minimized.

Show comment
Hide comment
@MarcoFalke

MarcoFalke Aug 19, 2016

Member

Concept ACK. Will test later.

Member

MarcoFalke commented Aug 19, 2016

Concept ACK. Will test later.

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Aug 19, 2016

Member

Added the missing button PNGs now to git. This should fix the compile issue.

Member

jonasschnelli commented Aug 19, 2016

Added the missing button PNGs now to git. This should fix the compile issue.

@luke-jr

This comment has been minimized.

Show comment
Hide comment
@luke-jr

luke-jr Aug 19, 2016

Member

Nice. Some people might want to see actual byte-size, weights, etc; probably will overflow the one-line-per-item paradigm quickly - maybe have a dropdown box to add stuff?

Member

luke-jr commented Aug 19, 2016

Nice. Some people might want to see actual byte-size, weights, etc; probably will overflow the one-line-per-item paradigm quickly - maybe have a dropdown box to add stuff?

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Aug 19, 2016

Member

Yes. Dropdown box could make sense. Adding a second graph below or on the right that just plots different data would probably also look good.

Member

jonasschnelli commented Aug 19, 2016

Yes. Dropdown box could make sense. Adding a second graph below or on the right that just plots different data would probably also look good.

@MarcoFalke

This comment has been minimized.

Show comment
Hide comment
@MarcoFalke

MarcoFalke Aug 19, 2016

Member

Nit: Fonts appear larger on my system. Otherwise this looks great!

screenshot from 2016-08-19 23-15-51

Member

MarcoFalke commented Aug 19, 2016

Nit: Fonts appear larger on my system. Otherwise this looks great!

screenshot from 2016-08-19 23-15-51

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Aug 20, 2016

Member

Switched to "Arial" as font and added a auto-size-adjustment.
Also added the "charts" icon for the menu.

Member

jonasschnelli commented Aug 20, 2016

Switched to "Arial" as font and added a auto-size-adjustment.
Also added the "charts" icon for the menu.

@MarcoFalke

This comment has been minimized.

Show comment
Hide comment
@MarcoFalke

MarcoFalke Aug 20, 2016

Member

Nit: run optimize-pngs and mention the icons in assets_attribution?

Member

MarcoFalke commented Aug 20, 2016

Nit: run optimize-pngs and mention the icons in assets_attribution?

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Aug 20, 2016

Member

Optimized the pngs and added them to the assets attribution file.

Member

jonasschnelli commented Aug 20, 2016

Optimized the pngs and added them to the assets attribution file.

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Aug 20, 2016

Concept ACK.

ghost commented Aug 20, 2016

Concept ACK.

@isle2983

This comment has been minimized.

Show comment
Hide comment
@isle2983

isle2983 Aug 21, 2016

Contributor

Nit1: The graph window is always drawn on top of the main window, even when the main window is active. It makes it annoying to use the rest of the GUI while this is open.

Nit2: The quantity labels for the Dynamic Memory Usage values on the left hand side of the graph are cramped and cut off some of the characters. See "500.00 KB" in the screenshot. It is like that for larger values once it gets into the 100MBs too.

mempoolstats

Contributor

isle2983 commented Aug 21, 2016

Nit1: The graph window is always drawn on top of the main window, even when the main window is active. It makes it annoying to use the rest of the GUI while this is open.

Nit2: The quantity labels for the Dynamic Memory Usage values on the left hand side of the graph are cramped and cut off some of the characters. See "500.00 KB" in the screenshot. It is like that for larger values once it gets into the 100MBs too.

mempoolstats

@rebroad

This comment has been minimized.

Show comment
Hide comment
@rebroad

rebroad Aug 24, 2016

Contributor

I'm not sure what I'm doing wrong but I've merged this and the graph is empty, and has been for an hour now... :-s i.e. Dynamic Memory Usage is stuck on 0 bytes, Amount of Txs also 0, MinRelayFee also zero.

Contributor

rebroad commented Aug 24, 2016

I'm not sure what I'm doing wrong but I've merged this and the graph is empty, and has been for an hour now... :-s i.e. Dynamic Memory Usage is stuck on 0 bytes, Amount of Txs also 0, MinRelayFee also zero.

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Aug 24, 2016

Member

@rebroad: what does getmempoolinfo tells you? Are you in sync on mainnet (or testnet)?

Member

jonasschnelli commented Aug 24, 2016

@rebroad: what does getmempoolinfo tells you? Are you in sync on mainnet (or testnet)?

@rebroad

This comment has been minimized.

Show comment
Hide comment
@rebroad

rebroad Aug 25, 2016

Contributor

@jonasschnelli problem solved - I had blocksonly=1 in the config file!! It's working really nicely now - great job!! I love how it can be resized and the period of time changed without the graph resetting (unlike the network traffic graph!).

Contributor

rebroad commented Aug 25, 2016

@jonasschnelli problem solved - I had blocksonly=1 in the config file!! It's working really nicely now - great job!! I love how it can be resized and the period of time changed without the graph resetting (unlike the network traffic graph!).

@fanquake

This comment has been minimized.

Show comment
Hide comment
@fanquake

fanquake Aug 26, 2016

Member

OS X screenshots:
init
more-than-10

Member

fanquake commented Aug 26, 2016

OS X screenshots:
init
more-than-10

@luke-jr

This comment has been minimized.

Show comment
Hide comment
@luke-jr

luke-jr Aug 27, 2016

Member

Using images for basically-a-checkbox gives a non-native look on every system. It looks like we can just colour a QCheckBox?

Member

luke-jr commented Aug 27, 2016

Using images for basically-a-checkbox gives a non-native look on every system. It looks like we can just colour a QCheckBox?

@paveljanik

This comment has been minimized.

Show comment
Hide comment
@paveljanik

paveljanik Sep 7, 2016

Contributor

Rebase needed.

Concept ACK

Agree about checkboxes...

Contributor

paveljanik commented Sep 7, 2016

Rebase needed.

Concept ACK

Agree about checkboxes...

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Sep 9, 2016

Member

Rebased on top of #8501

Member

jonasschnelli commented Sep 9, 2016

Rebased on top of #8501

Show outdated Hide outdated src/main.cpp
QGraphicsTextItem *item = scene->addText(drawTime.toString("HH:mm"), gridFont);
item->setPos(GRAPH_PADDING_LEFT+lX-(item->boundingRect().width()/2), bottom);
redrawItems.append(item);
qint64 step = secsTotal/amountOfLinesV;

This comment has been minimized.

@paveljanik

paveljanik Sep 15, 2016

Contributor

-Wshadow warning:

qt/mempoolstats.cpp:351:16: warning: declaration shadows a local variable [-Wshadow]
        qint64 step = secsTotal/amountOfLinesV;
               ^
qt/mempoolstats.cpp:240:11: note: previous declaration is here
    qreal step = maxwidth/(double)vSamples.size();
          ^
1 warning generated.
@paveljanik

paveljanik Sep 15, 2016

Contributor

-Wshadow warning:

qt/mempoolstats.cpp:351:16: warning: declaration shadows a local variable [-Wshadow]
        qint64 step = secsTotal/amountOfLinesV;
               ^
qt/mempoolstats.cpp:240:11: note: previous declaration is here
    qreal step = maxwidth/(double)vSamples.size();
          ^
1 warning generated.
@paveljanik

This comment has been minimized.

Show comment
Hide comment
@paveljanik

paveljanik Sep 15, 2016

Contributor

I really like this!

Suggestions:

  1. the menu item should read Mempool statistics (small s) to match other items in the menu.
  2. the window title should be the same (both title bar and top header - I think it is there only to balance the "legenda" on the right...) ;-)
  3. the graph itself in the window is not centered - it is a bit on the left side here.
  4. Esc should close the window.
Contributor

paveljanik commented Sep 15, 2016

I really like this!

Suggestions:

  1. the menu item should read Mempool statistics (small s) to match other items in the menu.
  2. the window title should be the same (both title bar and top header - I think it is there only to balance the "legenda" on the right...) ;-)
  3. the graph itself in the window is not centered - it is a bit on the left side here.
  4. Esc should close the window.
@paveljanik

This comment has been minimized.

Show comment
Hide comment
@paveljanik

paveljanik Sep 25, 2016

Contributor

Rebase needed.

Hmm, github shows "Conflicting files"...

Contributor

paveljanik commented Sep 25, 2016

Rebase needed.

Hmm, github shows "Conflicting files"...

@rebroad

This comment has been minimized.

Show comment
Hide comment
@rebroad

rebroad Oct 16, 2016

Contributor

I've been testing this under various window managers. On mwm the title of the mempool window says "bitcoin-qt". Also, it's not its own window like the debug window is, but a child of the main bitcoin-qt window, so it cannot be minimised on its own, and is minimised whenever the main window is minimised.

Contributor

rebroad commented Oct 16, 2016

I've been testing this under various window managers. On mwm the title of the mempool window says "bitcoin-qt". Also, it's not its own window like the debug window is, but a child of the main bitcoin-qt window, so it cannot be minimised on its own, and is minimised whenever the main window is minimised.

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Oct 17, 2016

Member

Thanks @rebroad.
I have plans to completely overhaul this PR during this week.

Member

jonasschnelli commented Oct 17, 2016

Thanks @rebroad.
I have plans to completely overhaul this PR during this week.

@rebroad

This comment has been minimized.

Show comment
Hide comment
@rebroad

rebroad Oct 22, 2016

Contributor

@jonasschnelli Needed a little rebasing... d7857e1

Contributor

rebroad commented Oct 22, 2016

@jonasschnelli Needed a little rebasing... d7857e1

@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj Oct 26, 2016

Member

Concept ACK, looks nice!

Member

laanwj commented Oct 26, 2016

Concept ACK, looks nice!

@rebroad

This comment has been minimized.

Show comment
Hide comment
@rebroad

rebroad Dec 5, 2016

Contributor

@gmaxwell Showing memory utilization, especially in relation to minfeerelay is useful for anyone wanting to refine the algorithm for setting minfeerelay.

I have set maxmempool to 144, i.e. 24 hours worth of 1MB blocks - in order to give me an indication of the minimum fee needed to keep a tx in the mempool for at least 24 hours - although not an indication for how much the fee needs to be to get it confirmed within 24 hours, admittedly.

Contributor

rebroad commented Dec 5, 2016

@gmaxwell Showing memory utilization, especially in relation to minfeerelay is useful for anyone wanting to refine the algorithm for setting minfeerelay.

I have set maxmempool to 144, i.e. 24 hours worth of 1MB blocks - in order to give me an indication of the minimum fee needed to keep a tx in the mempool for at least 24 hours - although not an indication for how much the fee needs to be to get it confirmed within 24 hours, admittedly.

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Dec 5, 2016

Member

I like the idea of the stacked chart. However I wanted to start with a simple graph to get in the fundamental stuff (stats core classes, drawing stuff). At the moment, the only insight into the mempool from the GUI you can get is the amount of transactions. IMO step after step.

Member

jonasschnelli commented Dec 5, 2016

I like the idea of the stacked chart. However I wanted to start with a simple graph to get in the fundamental stuff (stats core classes, drawing stuff). At the moment, the only insight into the mempool from the GUI you can get is the amount of transactions. IMO step after step.

@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj Dec 8, 2016

Member

However I wanted to start with a simple graph to get in the fundamental stuff (stats core classes, drawing stuff).

I tend to agree - one step at a time, scope creep before the initial merge will likely mean that this will never happen at all.
(needs rebase)

Member

laanwj commented Dec 8, 2016

However I wanted to start with a simple graph to get in the fundamental stuff (stats core classes, drawing stuff).

I tend to agree - one step at a time, scope creep before the initial merge will likely mean that this will never happen at all.
(needs rebase)

@rebroad

This comment has been minimized.

Show comment
Hide comment
@rebroad

rebroad Dec 11, 2016

Contributor

screenshot at 2016-12-11 10 34 09

@laanwj spot on re scope creep. In this sense, I'd say ACK to merging it now.

The screenshot attached is a typical example of what it looks like after running for a week or so. One thing that becomes apparent is that the horizontal graph label points become useless - i.e. once it goes over 24 hours of duration, it would make sense to switch to date instead of time.

Contributor

rebroad commented Dec 11, 2016

screenshot at 2016-12-11 10 34 09

@laanwj spot on re scope creep. In this sense, I'd say ACK to merging it now.

The screenshot attached is a typical example of what it looks like after running for a week or so. One thing that becomes apparent is that the horizontal graph label points become useless - i.e. once it goes over 24 hours of duration, it would make sense to switch to date instead of time.

luke-jr added a commit to bitcoinknots/bitcoin that referenced this pull request Dec 21, 2016

luke-jr added a commit to bitcoinknots/bitcoin that referenced this pull request Dec 21, 2016

@paveljanik

This comment has been minimized.

Show comment
Hide comment
@paveljanik

paveljanik Feb 22, 2017

Contributor

Rebase needed.

I really really would like to see this included in the GUI in the next version!

Contributor

paveljanik commented Feb 22, 2017

Rebase needed.

I really really would like to see this included in the GUI in the next version!

@luke-jr

This comment has been minimized.

Show comment
Hide comment
@luke-jr

luke-jr Feb 23, 2017

Member

FWIW, rebased (at least part of the way) in my stats_rpc-0.14 and stats_qt-0.14 branches.

Member

luke-jr commented Feb 23, 2017

FWIW, rebased (at least part of the way) in my stats_rpc-0.14 and stats_qt-0.14 branches.

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Feb 23, 2017

Member

This is based on #8501 (core change with additional RPC command) which has to get right first.
Another solution would be to not depend on a core statistics "module" and therefore collect the stats in a GUI container only. Maybe this would be the better first step.

Member

jonasschnelli commented Feb 23, 2017

This is based on #8501 (core change with additional RPC command) which has to get right first.
Another solution would be to not depend on a core statistics "module" and therefore collect the stats in a GUI container only. Maybe this would be the better first step.

@jtimon

This comment has been minimized.

Show comment
Hide comment
@jtimon

jtimon Feb 23, 2017

Member

Concept ACK needs rebase

Member

jtimon commented Feb 23, 2017

Concept ACK needs rebase

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Mar 8, 2017

The graphics are good, the design does not forget
Here you can see the different designs of graphs
http://www.bittbox.com/showcase/30-flat-analytics-ui-dashboards

I like this one


https://dribbble.com/shots/1719845-Statistics-General-trends

ghost commented Mar 8, 2017

The graphics are good, the design does not forget
Here you can see the different designs of graphs
http://www.bittbox.com/showcase/30-flat-analytics-ui-dashboards

I like this one


https://dribbble.com/shots/1719845-Statistics-General-trends

@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj Jun 6, 2017

Member

Seems the discussion here bled out.

I'd say please review the code, and then get it merged. Visual details etc can be changed later. Real-time statistics is one reason why people like to run their own nodes.

Member

laanwj commented Jun 6, 2017

Seems the discussion here bled out.

I'd say please review the code, and then get it merged. Visual details etc can be changed later. Real-time statistics is one reason why people like to run their own nodes.

@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj Jun 28, 2017

Member

Needs rebase.

Member

laanwj commented Jun 28, 2017

Needs rebase.

@Sjors

This comment has been minimized.

Show comment
Hide comment
@Sjors

Sjors Nov 9, 2017

Member

Concept ACK.

I can't compile this (log gist). I'll try again after the rebase.

A stacked chart of mempool bytes at different feerates would be much more interesting and useful

Agreed.

It would be nice to have a little chart icon in the bottom right corner of the wallet (in a future PR).

That said, I also agree with:

Visual details etc can be changed later.

Member

Sjors commented Nov 9, 2017

Concept ACK.

I can't compile this (log gist). I'll try again after the rebase.

A stacked chart of mempool bytes at different feerates would be much more interesting and useful

Agreed.

It would be nice to have a little chart icon in the bottom right corner of the wallet (in a future PR).

That said, I also agree with:

Visual details etc can be changed later.

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Nov 9, 2017

Member

This is based on #8501 and the question is, should it be Qt only (no Qt free stats collector) or should we try to get #8501 done?
(will rebase both PRs soon)

Member

jonasschnelli commented Nov 9, 2017

This is based on #8501 and the question is, should it be Qt only (no Qt free stats collector) or should we try to get #8501 done?
(will rebase both PRs soon)

jonasschnelli added some commits Aug 12, 2016

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Nov 22, 2017

Member

Rebased.
It's currently not Qt4 compatible due to a lambda signal connect (travis reported / working on it).

Member

jonasschnelli commented Nov 22, 2017

Rebased.
It's currently not Qt4 compatible due to a lambda signal connect (travis reported / working on it).

@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj Nov 23, 2017

Member

It's currently not Qt4 compatible due to a lambda signal connect (travis reported / working on it).

If it's a lot of work, feel free to leave "nice but not critical" features such as this out when compiling with Qt4.

Member

laanwj commented Nov 23, 2017

It's currently not Qt4 compatible due to a lambda signal connect (travis reported / working on it).

If it's a lot of work, feel free to leave "nice but not critical" features such as this out when compiling with Qt4.

@PierreRochard

This comment has been minimized.

Show comment
Hide comment
@PierreRochard

PierreRochard Dec 15, 2017

Contributor

ACK with Qt5

Contributor

PierreRochard commented Dec 15, 2017

ACK with Qt5

@jb55

Hmm for some reason I'm getting this error on my system:

qt/mempoolstats.cpp: In member function ‘void MempoolStats::drawChart()’:
qt/mempoolstats.cpp:183:42: error: ‘ceil’ was not declared in this scope
     maxValueSize = ceil(maxValueSize*0.11)*10; //use size steps of 10dip
                                          ^
qt/mempoolstats.cpp:256:108: error: ‘log10’ was not declared in this scope
     int64_t dynMemUsagelog10Val = pow(10.0f, floor(log10(maxDynMemUsage*paddingTopSizeFactor-minDynMemUsage)));
                                                                                                            ^
qt/mempoolstats.cpp:256:109: error: ‘floor’ was not declared in this scope
     int64_t dynMemUsagelog10Val = pow(10.0f, floor(log10(maxDynMemUsage*paddingTopSizeFactor-minDynMemUsage)));
                                                                                                             ^
qt/mempoolstats.cpp:256:110: error: ‘pow’ was not declared in this scope
     int64_t dynMemUsagelog10Val = pow(10.0f, floor(log10(maxDynMemUsage*paddingTopSizeFactor-minDynMemUsage)));
                                                                                                              ^

I fixed it with this patch:

diff --git a/src/qt/mempoolstats.cpp b/src/qt/mempoolstats.cpp
index 139efa1a9..af33a655b 100644
--- a/src/qt/mempoolstats.cpp
+++ b/src/qt/mempoolstats.cpp
@@ -8,6 +8,7 @@
 #include <qt/clientmodel.h>
 #include <qt/guiutil.h>
 #include <stats/stats.h>
+#include <math.h>
 
 static const char *LABEL_FONT = "Arial";
 static int LABEL_TITLE_SIZE = 22;
@Sjors

I did not need @jb55's patch on MacOS 10.13.2.

Although it can wait for a followup commit, I would prefer if more of the UI was built using interface builder (see #11950). That would it easier for other to improve the looks.

This should be easy for the header section above the chart and the duration toggles below. It's probably not realistic for the grid and X, Y axis and colored lines, although it would be nice if they can be styled using visual tools.

I left some inline comments, but didn't see any must-fix stuff.

The drawChart() function is rather large. Some stuff needs to be drawn only once, other stuff maybe only when there's a resize. Maybe that can be split? It might be safer to move some of the calculations into their own functions and test those against boundary values.

@@ -0,0 +1,423 @@
// Copyright (c) 2016 The Bitcoin Core developers

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member

Nit: bump to 2018?

@Sjors

Sjors Jan 8, 2018

Member

Nit: bump to 2018?

}
// draw vertical grid
int amountOfLinesV = 4;

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member

Nit: numberOfLinesV

@Sjors

Sjors Jan 8, 2018

Member

Nit: numberOfLinesV

QPainterPath dynMemUsageGridPath(QPointF(currentX, bottom));
// draw horizontal grid

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member

Move grid drawing to a function?

@Sjors

Sjors Jan 8, 2018

Member

Move grid drawing to a function?

if (!titleItem)
{
// create labels (only once)

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member

Move the once-only stuff to another function?

@Sjors

Sjors Jan 8, 2018

Member

Move the once-only stuff to another function?

QCheckBox *cb0 = new QCheckBox("Dynamic Memory Usage");
cb0->setStyleSheet("background-color: rgb(255,255,255);");
dynMemUsageSwitch = scene->addWidget(cb0);
connect(cb0, &QCheckBox::stateChanged, [cb0, this](){ drawDynMemUsage = cb0->isChecked(); drawChart(); });

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member

Move the user interacting bits to another function?

Also, do these really need to get redrawn every time? I'm not worried about performance, just code complexity. Adding and removing UI elements where it's not needed might also make using the interface builder more difficult.

@Sjors

Sjors Jan 8, 2018

Member

Move the user interacting bits to another function?

Also, do these really need to get redrawn every time? I'm not worried about performance, just code complexity. Adding and removing UI elements where it's not needed might also make using the interface builder more difficult.

connect(model, SIGNAL(mempoolStatsDidUpdate()), this, SLOT(drawChart()));
}
void MempoolStats::drawChart()

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member

Rename to drawChartFrame()? It draws a lot more than the chart.

@Sjors

Sjors Jan 8, 2018

Member

Rename to drawChartFrame()? It draws a lot more than the chart.

allDataLabel->setPos((width()-totalWidth)/2.0+last10MinLabel->boundingRect().width()+lastHourLabel->boundingRect().width()+lastDayLabel->boundingRect().width()+30,height()-filterBottomPadding);
// don't paint the grind/graph if there are no or only a signle sample
if (vSamples.size() < 2)

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member

drawEmptyChart()

@Sjors

Sjors Jan 8, 2018

Member

drawEmptyChart()

{
noDataItem->setVisible(true);
return;
}

This comment has been minimized.

@Sjors

Sjors Jan 8, 2018

Member
else {
  drawChart(vSamples, ...)
}
@Sjors

Sjors Jan 8, 2018

Member
else {
  drawChart(vSamples, ...)
}
@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj May 14, 2018

Member

This has been lingering for a long time. I would prefer if it makes it in, of course, it has tons of concept ACKs (the most of any open PR, according to bitcoinacks). But otherwise should we close and put this up for grabs?

Member

laanwj commented May 14, 2018

This has been lingering for a long time. I would prefer if it makes it in, of course, it has tons of concept ACKs (the most of any open PR, according to bitcoinacks). But otherwise should we close and put this up for grabs?

@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj Aug 31, 2018

Member

Although it would be really nice to have, this has been inactive for very long.
Closing and adding "up for grabs".

Member

laanwj commented Aug 31, 2018

Although it would be really nice to have, this has been inactive for very long.
Closing and adding "up for grabs".

@laanwj laanwj closed this Aug 31, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment