[Qt] New status bar Unit Display Control and related changes.
- New status bar control shows the current Unit of Display. When clicked (left,or right button) it shows a context menu that allows the user to switch the current Unit of Display (BTC, mBTC, uBTC) - Recent Requests and Transaction Table headers are now updated when unit of display is changed, because their "Amount" column now displays the current unit of display. - Takes care of issue #3970 Units in transaction export csv file. - Small refactors for reusability. - Demo Video https://www.youtube.com/watch?v=wwcr0Yh68go&list=UUG3jF2hgofmLWP0tRPisQAQ - changes after Diapolo's feedback. Have not been able to build after last pool, issues with boost on MacOSX, will test on Ubuntu these changes. - removed return statement on switch - renamed onDisplayUnitsChanged(int) to updateDisplayUnit(int) - now getAmountColumnTitle(int unit) takes a simple unit parameter. moved to BitcoinUnits.
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include <QAction>
|
||||
#include <QApplication>
|
||||
#include <QDateTime>
|
||||
#include <QDesktopWidget>
|
||||
@@ -39,6 +40,7 @@
|
||||
#include <QMenuBar>
|
||||
#include <QMessageBox>
|
||||
#include <QMimeData>
|
||||
#include <QPoint>
|
||||
#include <QProgressBar>
|
||||
#include <QProgressDialog>
|
||||
#include <QSettings>
|
||||
@@ -49,6 +51,8 @@
|
||||
#include <QToolBar>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
|
||||
|
||||
#if QT_VERSION < 0x050000
|
||||
#include <QUrl>
|
||||
#include <QTextDocument>
|
||||
@@ -156,10 +160,13 @@ BitcoinGUI::BitcoinGUI(bool fIsTestnet, QWidget *parent) :
|
||||
QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks);
|
||||
frameBlocksLayout->setContentsMargins(3,0,3,0);
|
||||
frameBlocksLayout->setSpacing(3);
|
||||
unitDisplayControl = new UnitDisplayStatusBarControl();
|
||||
labelEncryptionIcon = new QLabel();
|
||||
labelConnectionsIcon = new QLabel();
|
||||
labelBlocksIcon = new QLabel();
|
||||
frameBlocksLayout->addStretch();
|
||||
frameBlocksLayout->addWidget(unitDisplayControl);
|
||||
frameBlocksLayout->addStretch();
|
||||
frameBlocksLayout->addWidget(labelEncryptionIcon);
|
||||
frameBlocksLayout->addStretch();
|
||||
frameBlocksLayout->addWidget(labelConnectionsIcon);
|
||||
@@ -420,6 +427,8 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
|
||||
walletFrame->setClientModel(clientModel);
|
||||
}
|
||||
#endif
|
||||
|
||||
this->unitDisplayControl->setOptionsModel(clientModel->getOptionsModel());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1000,3 +1009,72 @@ void BitcoinGUI::unsubscribeFromCoreSignals()
|
||||
// Disconnect signals from client
|
||||
uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
|
||||
}
|
||||
|
||||
UnitDisplayStatusBarControl::UnitDisplayStatusBarControl():QLabel()
|
||||
{
|
||||
optionsModel = 0;
|
||||
createContextMenu();
|
||||
setStyleSheet("font:11pt; color: #333333");
|
||||
setToolTip(tr("Unit to show amounts in. Click to select another unit."));
|
||||
}
|
||||
|
||||
/** So that it responds to left-button clicks */
|
||||
void UnitDisplayStatusBarControl::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
onDisplayUnitsClicked(event->pos());
|
||||
}
|
||||
|
||||
/** Creates context menu, its actions, and wires up all the relevant signals for mouse events. */
|
||||
void UnitDisplayStatusBarControl::createContextMenu()
|
||||
{
|
||||
menu = new QMenu();
|
||||
foreach(BitcoinUnits::Unit u, BitcoinUnits::availableUnits())
|
||||
{
|
||||
QAction *menuAction = new QAction(QString(BitcoinUnits::name(u)), this);
|
||||
menuAction->setData(QVariant(u));
|
||||
menu->addAction(menuAction);
|
||||
}
|
||||
connect(menu,SIGNAL(triggered(QAction*)),this,SLOT(onMenuSelection(QAction*)));
|
||||
|
||||
// what happens on right click.
|
||||
setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
connect(this,SIGNAL(customContextMenuRequested(const QPoint&)),this,SLOT(onDisplayUnitsClicked(const QPoint&)));
|
||||
}
|
||||
|
||||
/** Lets the control know about the Options Model (and its signals) */
|
||||
void UnitDisplayStatusBarControl::setOptionsModel(OptionsModel *optionsModel)
|
||||
{
|
||||
if (optionsModel)
|
||||
{
|
||||
this->optionsModel = optionsModel;
|
||||
|
||||
// be aware of a display unit change reported by the OptionsModel object.
|
||||
connect(optionsModel,SIGNAL(displayUnitChanged(int)),this,SLOT(updateDisplayUnit(int)));
|
||||
|
||||
// initialize the display units label with the current value in the model.
|
||||
updateDisplayUnit(optionsModel->getDisplayUnit());
|
||||
}
|
||||
}
|
||||
|
||||
/** When Display Units are changed on OptionsModel it will refresh the display text of the control on the status bar */
|
||||
void UnitDisplayStatusBarControl::updateDisplayUnit(int newUnits)
|
||||
{
|
||||
setText(BitcoinUnits::name(newUnits));
|
||||
}
|
||||
|
||||
/** Shows context menu with Display Unit options by the mouse coordinates */
|
||||
void UnitDisplayStatusBarControl::onDisplayUnitsClicked(const QPoint& point)
|
||||
{
|
||||
QPoint globalPos = mapToGlobal(point);
|
||||
menu->exec(globalPos);
|
||||
}
|
||||
|
||||
/** Tells underlying optionsModel to update its current display unit. */
|
||||
void UnitDisplayStatusBarControl::onMenuSelection(QAction* action)
|
||||
{
|
||||
if (action)
|
||||
{
|
||||
optionsModel->setDisplayUnit(action->data());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user