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

Already on GitHub? Sign in to your account

[Qt] Add out-of-sync modal info layer #8371

Merged
merged 7 commits into from Sep 23, 2016

Conversation

Projects
None yet
Member

jonasschnelli commented Jul 19, 2016

Adresses #8060 and #7235

This change will slide in a semi transparent modal info layer in out-of-sync state resulting in a more prominent warning. Users can hide the modal info layer by pressing on "Hide".
Clicking on the out-of-sync warning icons will re-display the modal info layer.

In the modal info layer, the user can get three new values:

  • amount of blocks left
  • estimated time left until in-sync
  • progress increase per hour

bildschirmfoto 2016-07-19 um 15 53 16

@jonasschnelli jonasschnelli added the GUI label Jul 19, 2016

Member

instagibbs commented Jul 20, 2016

"Progress increase per hour" is a bit weird sounding to me, maybe "Sync progress per hour"?

Owner

laanwj commented Jul 20, 2016

Looks very nice!

Owner

laanwj commented Jul 28, 2016

  • Looks like the font color should not depend on the theme?
    overlay
  • Maybe add some more text after "...but this process has not completed yet", to make it more concrete "this means that recent transactions will not be visible, and the balance will not be up-to-date until this process has completed."
Member

jonasschnelli commented Jul 28, 2016

Added the second info text and made sure, the font will be blackish (force push).

@jonasschnelli jonasschnelli added this to the 0.14 milestone Jul 28, 2016

Member

fanquake commented Aug 8, 2016

Testing this, and clicking hide doesn't seem to do anything?
Also, If your opening a close-to, or recently synced wallet, should the modal disappear automatically once it reaches 100%?

OS X screenshots:
modal
full-wallet

Also, this looks like a new compiler warning.

  CXX      qt/qt_libbitcoinqt_a-bitcoingui.o
qt/bitcoingui.cpp:118:5: warning: field 'spinnerFrame' will be initialized after field 'modalOverlay' [-Wreorder]
    spinnerFrame(0),
    ^
1 warning generated.
Member

jonasschnelli commented Aug 12, 2016

@fanquake: It should hide automatically if you are in sync,.. but only, If you haven't opened it manually (by pressing the warning icons).
Not sure if it should also hide in that case, but probably.

Look great! Maybe add to the warning text that it's also not possible to send bitcoins?

Member

jonasschnelli commented Aug 26, 2016

Fixed warning. Added a short text passage "Spending bitcoins is not possible during that phase!".

Owner

sipa commented Aug 26, 2016

Does the "This process is not complete yet" disappear when 100% is reached, but the window is still open?

jonasschnelli added some commits Jul 19, 2016

Member

jonasschnelli commented Aug 26, 2016

@sipa: yes. It will (https://github.com/bitcoin/bitcoin/pull/8371/files#diff-0db7dd184df07a48c307ccc182021a68R776). But only if you not have manually opened the "window" by clicking on the alert icons (then it will stay intentionally).

Owner

sipa commented Aug 26, 2016

Member

jonasschnelli commented Aug 26, 2016

Ah. I get your point. Maybe force closing then would make sense (or changing the text in the upper section [more complicate]).

Owner

sipa commented Aug 26, 2016

Member

MarcoFalke commented Aug 26, 2016

I think force closing is fine.

Agree

Member

jonasschnelli commented Aug 26, 2016

Updated so that the layer/window does force close when the we detect in-sync state.

Owner

sipa commented Aug 26, 2016

The "number of blocks left" goes up and down for a while (presumably because the headers aren't processed yet?)... if the tip header is too far in the past, it may be better to say "unknown" there.

Member

fanquake commented Aug 26, 2016

Updated OS X screenshot, the hiding issue seems to be fixed now.
modal

Member

luke-jr commented Sep 10, 2016

Looks like the font color should not depend on the theme?

Rather, the background colour should depend on the theme also? Why is this overriding the theme?

Contributor

flack commented Sep 12, 2016

Shouldn't this dialog also have a headline of some sort (e.g. "Wallet out of sync")?

Because if I look at the screenshot, I only see the progress data, and the text starts with "The displayed information may be out of date", but in fact, it's not the currently displayed data (progress information) that is out of date, but the stuff in the wallet, which is obscured by the overlay.

Member

jonasschnelli commented Sep 12, 2016

@luke-jr: I think creating nice visualizations is difficult with the presumption to only use theme based colors.

@flack: Indeed. The term "the displayed information... " can look like its referred to the data below (in the same overlay). I have plans to overhaul this PR soon.

Member

jonasschnelli commented Sep 13, 2016

Updated with recommendation from @sipa to hide the remaining blocks during headers-first during IBD.

bildschirmfoto 2016-09-13 um 18 01 34

Tested-only ACK. Found a few style nits. (You can fix them in a separate fixup commit)

ACK d8b062e

src/qt/bitcoingui.cpp
+ modalOverlay->setKnownBestHeight(clientModel->getHeaderTipHeight(), QDateTime::fromTime_t(clientModel->getHeaderTipTime()));
+ }
+ else
+ modalOverlay->tipUpdate(count, blockDate, nVerificationProgress);
@MarcoFalke

MarcoFalke Sep 21, 2016

Member

style nit: brackets are "required" for the else when they are used for the if.

src/qt/modaloverlay.cpp
+ // show progress speed if we have more then one sample
+ if (blockProcessTime.size() >= 2)
+ {
+ // try to get the window from the last 500 seconds or at least 10 samples
@MarcoFalke

MarcoFalke Sep 21, 2016

Member

Where does it say 10 in the source code?

src/qt/modaloverlay.cpp
+ ui->expectedTimeLeft->setText(GUIUtil::formateNiceTimeOffset(remainingMSecs/1000.0));
+
+ // keep maximal 5000 samples
+ static int maxSamples = 5000;
@MarcoFalke

MarcoFalke Sep 21, 2016

Member

nit

static const int MAX_SAMPLES = 5000;
src/qt/walletframe.h
@@ -38,6 +38,10 @@ class WalletFrame : public QFrame
void showOutOfSyncWarning(bool fShow);
+Q_SIGNALS:
+ /** Notify that the user has requested more information about the out-of-sync warning */
+ void requestedOfSyncWarningInfo();
@MarcoFalke

MarcoFalke Sep 21, 2016

Member

nit: I don't think this is proper English. Idk, get rid of the Of?

Member

MarcoFalke commented Sep 21, 2016

Looks good to merge

screenshot from 2016-09-21 10-20-23

Member

jonasschnelli commented Sep 21, 2016

Fixed nits reported by @MarcoFalke.
@MarcoFalke: can you re-ack?

Member

luke-jr commented Sep 21, 2016

@jonasschnelli On the contrary, violating the theme contradicts the goal of nice visualisations.

Member

jonasschnelli commented Sep 21, 2016

@luke-jr: I think adding a black overlay with white text does not directly violates the theme. It just will result in a more controllable look and feel.

Member

luke-jr commented Sep 21, 2016

Software controlling look-and-feel means the user's chosen look-and-feel is being ignored. Presumably the user has chosen them because they like it, so violating them simply won't be nice.

Member

jonasschnelli commented Sep 21, 2016

I think themes are there for a reason.
Using the theme colors might result in loosing the optical effect which is there for a reason. The back background with the white info layer should imply that the informations within the layer are on a different level of importance.

But happy if someone likes to try migrating this to the theme colors.

Member

luke-jr commented Sep 21, 2016

(BTW, I don't mean to imply theme concerns need to interfere in merging this. By all means, feel free. We can work on theming later.)

Member

gmaxwell commented Sep 22, 2016

Too much text, esp too much bolded text. I automatically don't read the top part (though I did in the original version). Also "Spending bitcoins is not possible during that phase!" is not true.

Owner

sipa commented Sep 23, 2016

Member

gmaxwell commented Sep 23, 2016

@sipa Yes, but you can spend anything you can see... This is a common point of confusion already. And in the common case where you had bitcoin off for the last month, but received no payment since then, you're good to go for sending.

Member

jonasschnelli commented Sep 23, 2016

@gmaxwell: would you be willing providing a better text?

I agree that "spending Bitcoins is not possible" is not true and can lead to confusion, especially if one catches up just a couple of days (the info-layer will also be shown then).

src/qt/forms/modaloverlay.ui
+ </font>
+ </property>
+ <property name="text">
+ <string>This means that recent transactions will not be visible, and the balance will not be up-to-date until this process has completed. Spending bitcoins is not possible during that phase!</string>
@MarcoFalke

MarcoFalke Sep 23, 2016

Member

Maybe

s/possible/recommended/

?

@jonasschnelli

jonasschnelli Sep 23, 2016

Member

Or what about [...]Spending bitcoins may not be possible[...]?

@MarcoFalke

MarcoFalke Sep 23, 2016

Member

Fine, I think either is better.

Member

jonasschnelli commented Sep 23, 2016

Force pushed a text- and bold-section-change.
This is how it looks now:
bildschirmfoto 2016-09-23 um 15 31 38

Member

MarcoFalke commented Sep 23, 2016

Are you sure you pushed the text change?

Member

jonasschnelli commented Sep 23, 2016

Pushed now..

Member

MarcoFalke commented Sep 23, 2016

ACK 08827df

@jonasschnelli jonasschnelli merged commit 08827df into bitcoin:master Sep 23, 2016

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details

jonasschnelli added a commit that referenced this pull request Sep 23, 2016

Merge #8371: [Qt] Add out-of-sync modal info layer
08827df [Qt] modalinfolayer: removed unused comments, renamed signal, code style overhaul (Jonas Schnelli)
d8b062e [Qt] only update "amount of blocks left" when the header chain is in-sync (Jonas Schnelli)
e3245b4 [Qt] add out-of-sync modal info layer (Jonas Schnelli)
e47052f [Qt] ClientModel add method to get the height of the header chain (Jonas Schnelli)
a001f18 [Qt] Always pass the numBlocksChanged signal for headers tip changed (Jonas Schnelli)
bd44a04 [Qt] make Out-Of-Sync warning icon clickable (Jonas Schnelli)
0904c3c [Refactor] refactor function that forms human readable text out of a timeoffset (Jonas Schnelli)
@@ -234,7 +250,7 @@ static void BlockTipChanged(ClientModel *clientmodel, bool initialSync, const CB
int64_t& nLastUpdateNotification = fHeader ? nLastHeaderTipUpdateNotification : nLastBlockTipUpdateNotification;
// if we are in-sync, update the UI regardless of last update time
- if (!initialSync || now - nLastUpdateNotification > MODEL_UPDATE_DELAY) {
+ if (fHeader || !initialSync || now - nLastUpdateNotification > MODEL_UPDATE_DELAY) {
@MarcoFalke

MarcoFalke Sep 25, 2016

Member

Why is this needed?

Oh, nvm. It is needed so a header update is not accidentally lost. Still, this makes the gui unresponsive when -reindex is used...

Contributor

Xekyo commented Sep 26, 2016

Instead of "this process" and "that phase" I would repeat "synchronization":

The displayed information may be out of date.
Your wallet automatically synchronizes with the Bitcoin network while connected, but synchronization has not completed yet. Recent transactions will not be visible until your wallet catches up to the network. Your balance will update as transactions are processed.
Spending bitcoins may not be possible until synchronization has finished.

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

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

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

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

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

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

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

codablock added a commit to codablock/dash that referenced this pull request Sep 7, 2017

Merge #8371: [Qt] Add out-of-sync modal info layer
08827df [Qt] modalinfolayer: removed unused comments, renamed signal, code style overhaul (Jonas Schnelli)
d8b062e [Qt] only update "amount of blocks left" when the header chain is in-sync (Jonas Schnelli)
e3245b4 [Qt] add out-of-sync modal info layer (Jonas Schnelli)
e47052f [Qt] ClientModel add method to get the height of the header chain (Jonas Schnelli)
a001f18 [Qt] Always pass the numBlocksChanged signal for headers tip changed (Jonas Schnelli)
bd44a04 [Qt] make Out-Of-Sync warning icon clickable (Jonas Schnelli)
0904c3c [Refactor] refactor function that forms human readable text out of a timeoffset (Jonas Schnelli)

UdjinM6 added a commit to dashpay/dash that referenced this pull request Sep 9, 2017

Backport Bitcoin Qt/Gui changes up to 0.14.x part 2 (#1615)
* Merge #7506: Use CCoinControl selection in CWallet::FundTransaction

d6cc6a1 Use CCoinControl selection in CWallet::FundTransaction (João Barbosa)

* Merge #7732: [Qt] Debug window: replace "Build date" with "Datadir"

fc737d1 [Qt] remove unused formatBuildDate method (Jonas Schnelli)
4856f1d [Qt] Debug window: replace "Build date" with "Datadir" (Jonas Schnelli)

* Merge #7707: [RPC][QT] UI support for abandoned transactions

8efed3b [Qt] Support for abandoned/abandoning transactions (Jonas Schnelli)

* Merge #7688: List solvability in listunspent output and improve help

c3932b3 List solvability in listunspent output and improve help (Pieter Wuille)

* Merge #8006: Qt: Add option to disable the system tray icon

8b0e497 Qt: Add option to hide the system tray icon (Tyler Hardin)

* Merge #8073: qt: askpassphrasedialog: Clear pass fields on accept

02ce2a3 qt: askpassphrasedialog: Clear pass fields on accept (Pavel Vasin)

* Merge #8231: [Qt] fix a bug where the SplashScreen will not be hidden during startup

b3e1348 [Qt] fix a bug where the SplashScreen will not be hidden during startup (Jonas Schnelli)

* Merge #8257: Do not ask a UI question from bitcoind

1acf1db Do not ask a UI question from bitcoind (Pieter Wuille)

* Merge #8463: [qt] Remove Priority from coincontrol dialog

fa8dd78 [qt] Remove Priority from coincontrol dialog (MarcoFalke)

* Merge #8678: [Qt][CoinControl] fix UI bug that could result in paying unexpected fee

0480293 [Qt][CoinControl] fix UI bug that could result in paying unexpected fee (Jonas Schnelli)

* Merge #8672: Qt: Show transaction size in transaction details window

c015634 qt: Adding transaction size to transaction details window (Hampus Sjöberg)
 \-- merge fix for s/size/total size/
fdf82fb Adding method GetTotalSize() to CTransaction (Hampus Sjöberg)

* Merge #8371: [Qt] Add out-of-sync modal info layer

08827df [Qt] modalinfolayer: removed unused comments, renamed signal, code style overhaul (Jonas Schnelli)
d8b062e [Qt] only update "amount of blocks left" when the header chain is in-sync (Jonas Schnelli)
e3245b4 [Qt] add out-of-sync modal info layer (Jonas Schnelli)
e47052f [Qt] ClientModel add method to get the height of the header chain (Jonas Schnelli)
a001f18 [Qt] Always pass the numBlocksChanged signal for headers tip changed (Jonas Schnelli)
bd44a04 [Qt] make Out-Of-Sync warning icon clickable (Jonas Schnelli)
0904c3c [Refactor] refactor function that forms human readable text out of a timeoffset (Jonas Schnelli)

* Merge #8805: Trivial: Grammar and capitalization

c9ce17b Trivial: Grammar and capitalization (Derek Miller)

* Merge #8885: gui: fix ban from qt console

cb78c60 gui: fix ban from qt console (Cory Fields)

* Merge #8821: [qt] sync-overlay: Don't block during reindex

fa85e86 [qt] sync-overlay: Don't show estimated number of headers left (MarcoFalke)
faa4de2 [qt] sync-overlay: Don't block during reindex (MarcoFalke)

* Support themes for new transaction_abandoned icon

* Fix constructor call to COutput

* Merge #7842: RPC: do not print minping time in getpeerinfo when no ping received yet

62a6486 RPC: do not print ping info in getpeerinfo when no ping received yet, fix help (Pavel Janík)

* Merge #8918: Qt: Add "Copy URI" to payment request context menu

21f5a63 Qt: Add "Copy URI" to payment request context menu (Luke Dashjr)

* Merge #8925: qt: Display minimum ping in debug window.

1724a40 Display minimum ping in debug window. (R E Broadley)

* Merge #8972: [Qt] make warnings label selectable (jonasschnelli)

ef0c9ee [Qt] make warnings label selectable (Jonas Schnelli)

* Make background of warning icon transparent in modaloverlay

* Merge #9088: Reduce ambiguity of warning message

77cbbd9 Make warning message about wallet balance possibly being incorrect less ambiguous. (R E Broadley)

* Replace Bitcoin with Dash in modal overlay

* Remove clicked signals from labelWalletStatus and labelTransactionsStatus

As both are really just labels, clicking on those is not possible.
This is different in Bitcoin, where these labels are actually buttons.

* Pull out modaloverlay show/hide into it's own if/else block and switch to time based check

Also don't use masternodeSync.IsBlockchainSynced() for now as it won't
report the blockchain being synced before the first block (or other MN
data?) arrives. This would otherwise give the impression that sync is
being stuck.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment