void MainWindow::initHome() {
// Ticker widgets
- m_priceTickerWidgets.append(new PriceTickerWidget(this, m_ctx, "XMR"));
- m_priceTickerWidgets.append(new PriceTickerWidget(this, m_ctx, "BTC"));
- for (const auto &widget : m_priceTickerWidgets) {
+ m_tickerWidgets.append(new PriceTickerWidget(this, m_ctx, "XMR"));
+ m_tickerWidgets.append(new PriceTickerWidget(this, m_ctx, "BTC"));
+ m_tickerWidgets.append(new RatioTickerWidget(this, m_ctx, "XMR", "BTC"));
+ for (const auto &widget : m_tickerWidgets) {
ui->tickerLayout->addWidget(widget);
}
void MainWindow::menuSettingsClicked() {
Settings settings{m_ctx, this};
- for (const auto &widget: m_priceTickerWidgets) {
- connect(&settings, &Settings::preferredFiatCurrencyChanged, widget, &PriceTickerWidget::updateDisplay);
+ for (const auto &widget: m_tickerWidgets) {
+ connect(&settings, &Settings::preferredFiatCurrencyChanged, widget, &TickerWidgetBase::updateDisplay);
}
connect(&settings, &Settings::preferredFiatCurrencyChanged, m_balanceTickerWidget, &BalanceTickerWidget::updateDisplay);
connect(&settings, &Settings::preferredFiatCurrencyChanged, m_sendWidget, QOverload<>::of(&SendWidget::onPreferredFiatCurrencyChanged));
{
ui->setupUi(this);
- ui->tickerPct->setFont(Utils::relativeFont(-2));
+ ui->tickerPct->setFont(Utils::relativeFont(-1));
ui->tickerFiat->setFont(Utils::relativeFont(0));
this->setPercentageText("0.0", true);
ui->tickerFiat->setText(conversionText);
}
+void TickerWidgetBase::setDisplayText(const QString &text) {
+ ui->tickerFiat->setText(text);
+}
+
// BalanceTickerWidget
BalanceTickerWidget::BalanceTickerWidget(QWidget *parent, QSharedPointer<AppContext> ctx, bool totalBalance)
: TickerWidgetBase(parent, std::move(ctx))
this->setTitle(m_symbol);
connect(&appData()->prices, &Prices::fiatPricesUpdated, this, &PriceTickerWidget::updateDisplay);
- connect(&appData()->prices, &Prices::fiatPricesUpdated, this, &PriceTickerWidget::updateDisplay);
+ connect(&appData()->prices, &Prices::cryptoPricesUpdated, this, &PriceTickerWidget::updateDisplay);
}
void PriceTickerWidget::updateDisplay() {
return;
double percentChange24h = markets[m_symbol].price_usd_change_pct_24h;
- QString percentChange24hStr = QString::number(percentChange24h, 'f', 2);
+ QString percentChange24hStr = QString::number(percentChange24h, 'f', 1);
this->setPercentageText(percentChange24hStr, percentChange24h >= 0.0);
this->setFiatText(price, fiatCurrency);
}
+
+//RatioTickerWidget
+RatioTickerWidget::RatioTickerWidget(QWidget *parent, QSharedPointer<AppContext> ctx, QString symbol1, QString symbol2)
+ : TickerWidgetBase(parent, std::move(ctx))
+ , m_symbol1(std::move(symbol1))
+ , m_symbol2(std::move(symbol2))
+{
+ this->setTitle(QString("%1/%2").arg(m_symbol1, m_symbol2));
+
+ connect(&appData()->prices, &Prices::fiatPricesUpdated, this, &RatioTickerWidget::updateDisplay);
+ connect(&appData()->prices, &Prices::cryptoPricesUpdated, this, &RatioTickerWidget::updateDisplay);
+}
+
+void RatioTickerWidget::updateDisplay() {
+ double ratio = appData()->prices.convert(m_symbol1, m_symbol2, 1);
+ if (ratio < 0)
+ return;
+
+ // Approximation based on USD price
+ if (appData()->prices.markets.contains(m_symbol1) && appData()->prices.markets.contains(m_symbol2)) {
+ double price_symbol1 = appData()->prices.markets[m_symbol1].price_usd;
+ double price_symbol1_24h_ago = price_symbol1 - (price_symbol1 * (appData()->prices.markets[m_symbol1].price_usd_change_pct_24h / 100));
+
+ double price_symbol2 = appData()->prices.markets[m_symbol2].price_usd;
+ double price_symbol2_24h_ago = price_symbol2 - (price_symbol2 * (appData()->prices.markets[m_symbol2].price_usd_change_pct_24h / 100));
+ if (price_symbol2_24h_ago == 0) return;
+
+ double ratio_24h_ago = price_symbol1_24h_ago / price_symbol2_24h_ago;
+ if (ratio_24h_ago == 0) return;
+
+ double percentage_change = ((ratio - ratio_24h_ago) / ratio_24h_ago) * 100;
+
+ this->setPercentageText(QString::number(percentage_change, 'f', 1), ratio >= ratio_24h_ago);
+ }
+
+ this->setDisplayText(QString::number(ratio, 'f', 6));
+}
\ No newline at end of file