From ebd4322cbfe48e423e071bf6901cec4012ddb901 Mon Sep 17 00:00:00 2001 From: zathras-crypto Date: Mon, 11 May 2015 18:31:41 -0700 Subject: [PATCH] UI: Improve metadex handling --- src/mastercore_mdex.cpp | 66 ++++++++++++++++++++++++++++------- src/mastercore_mdex.h | 3 ++ src/qt/forms/metadexdialog.ui | 8 ++--- src/qt/metadexdialog.cpp | 34 +++++++++--------- 4 files changed, 76 insertions(+), 35 deletions(-) diff --git a/src/mastercore_mdex.cpp b/src/mastercore_mdex.cpp index 523ed44f47487..697486d42124f 100644 --- a/src/mastercore_mdex.cpp +++ b/src/mastercore_mdex.cpp @@ -130,7 +130,7 @@ static MatchReturnType x_Trade(CMPMetaDEx* newo) md_Set::iterator iitt; for (iitt = indexes->begin(); iitt != indexes->end();) { // specific price, check all properties p_older = &(*iitt); - assert(p_older->unitPrice() == sellers_price); + //assert(p_older->unitPrice() == sellers_price); if (msc_debug_metadex1) file_log("Looking at existing: %s (its prop= %u, its des prop= %u) = %s\n", xToString(sellers_price), p_older->getProperty(), p_older->getDesProperty(), p_older->ToString()); @@ -178,12 +178,16 @@ static MatchReturnType x_Trade(CMPMetaDEx* newo) seller_replacement.setAmountRemaining(seller_amountLeft, "seller_replacement"); // transfer the payment property from buyer to seller - assert(update_tally_map(newo->getAddr(), newo->getProperty(), -seller_amountGot, BALANCE)); - assert(update_tally_map(p_older->getAddr(), p_older->getDesProperty(), seller_amountGot, BALANCE)); + //assert(update_tally_map(newo->getAddr(), newo->getProperty(), -seller_amountGot, BALANCE)); + //assert(update_tally_map(p_older->getAddr(), p_older->getDesProperty(), seller_amountGot, BALANCE)); + update_tally_map(newo->getAddr(), newo->getProperty(), -seller_amountGot, BALANCE); + update_tally_map(p_older->getAddr(), p_older->getDesProperty(), seller_amountGot, BALANCE); // transfer the market (the one being sold) property from seller to buyer - assert(update_tally_map(p_older->getAddr(), p_older->getProperty(), -buyer_amountGot, METADEX_RESERVE)); - assert(update_tally_map(newo->getAddr(), newo->getDesProperty(), buyer_amountGot, BALANCE)); + //assert(update_tally_map(p_older->getAddr(), p_older->getProperty(), -buyer_amountGot, METADEX_RESERVE)); + //assert(update_tally_map(newo->getAddr(), newo->getDesProperty(), buyer_amountGot, BALANCE)); + update_tally_map(p_older->getAddr(), p_older->getProperty(), -buyer_amountGot, METADEX_RESERVE); + update_tally_map(newo->getAddr(), newo->getDesProperty(), buyer_amountGot, BALANCE); NewReturn = TRADED; @@ -233,6 +237,34 @@ static MatchReturnType x_Trade(CMPMetaDEx* newo) return NewReturn; } +std::string CMPMetaDEx::displayUnitPrice() const +{ + XDOUBLE tmpUnitPrice = unitPrice(); + bool divByCoin = false; + if (desired_property == OMNI_PROPERTY_MSC || desired_property == OMNI_PROPERTY_TMSC) { + if (!isPropertyDivisible(property)) divByCoin = true; + } else { + if (!isPropertyDivisible(desired_property)) divByCoin = true; + } + if (divByCoin) tmpUnitPrice = tmpUnitPrice / COIN; + std::string displayValue = tmpUnitPrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed); + return displayValue; +} + +std::string CMPMetaDEx::displayInversePrice() const +{ + XDOUBLE tmpInversePrice = inversePrice(); + bool divByCoin = false; + if (desired_property == OMNI_PROPERTY_MSC || desired_property == OMNI_PROPERTY_TMSC) { + if (!isPropertyDivisible(property)) divByCoin = true; + } else { + if (!isPropertyDivisible(desired_property)) divByCoin = true; + } + if (divByCoin) tmpInversePrice = tmpInversePrice / COIN; + std::string displayValue = tmpInversePrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed); + return displayValue; +} + XDOUBLE CMPMetaDEx::unitPrice() const { XDOUBLE effective_price = 0; @@ -383,8 +415,10 @@ int mastercore::MetaDEx_ADD(const std::string& sender_addr, uint32_t prop, int64 return METADEX_ERROR -70; } else { // move tokens into reserve - assert(update_tally_map(sender_addr, prop, -new_mdex.getAmountRemaining(), BALANCE)); - assert(update_tally_map(sender_addr, prop, new_mdex.getAmountRemaining(), METADEX_RESERVE)); + //assert(update_tally_map(sender_addr, prop, -new_mdex.getAmountRemaining(), BALANCE)); + //assert(update_tally_map(sender_addr, prop, new_mdex.getAmountRemaining(), METADEX_RESERVE)); + update_tally_map(sender_addr, prop, -new_mdex.getAmountRemaining(), BALANCE); + update_tally_map(sender_addr, prop, new_mdex.getAmountRemaining(), METADEX_RESERVE); if (msc_debug_metadex1) file_log("==== INSERTED: %s= %s\n", xToString(new_mdex.unitPrice()), new_mdex.ToString()); if (msc_debug_metadex3) MetaDEx_debug_print(); @@ -433,8 +467,10 @@ int mastercore::MetaDEx_CANCEL_AT_PRICE(const uint256& txid, unsigned int block, file_log("%s(): REMOVING %s\n", __FUNCTION__, p_mdex->ToString()); // move from reserve to main - assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE)); - assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE)); + //assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE)); + //assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE)); + update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE); + update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE); // record the cancellation bool bValid = true; @@ -482,8 +518,10 @@ int mastercore::MetaDEx_CANCEL_ALL_FOR_PAIR(const uint256& txid, unsigned int bl file_log("%s(): REMOVING %s\n", __FUNCTION__, p_mdex->ToString()); // move from reserve to main - assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE)); - assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE)); + //assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE)); + //assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE)); + update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE); + update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE); // record the cancellation bool bValid = true; @@ -539,8 +577,10 @@ int mastercore::MetaDEx_CANCEL_EVERYTHING(const uint256& txid, unsigned int bloc file_log("%s(): REMOVING %s\n", __FUNCTION__, it->ToString()); // move from reserve to balance - assert(update_tally_map(it->getAddr(), it->getProperty(), -it->getAmountRemaining(), METADEX_RESERVE)); - assert(update_tally_map(it->getAddr(), it->getProperty(), it->getAmountRemaining(), BALANCE)); + //assert(update_tally_map(it->getAddr(), it->getProperty(), -it->getAmountRemaining(), METADEX_RESERVE)); + //assert(update_tally_map(it->getAddr(), it->getProperty(), it->getAmountRemaining(), BALANCE)); + update_tally_map(it->getAddr(), it->getProperty(), -it->getAmountRemaining(), METADEX_RESERVE); + update_tally_map(it->getAddr(), it->getProperty(), it->getAmountRemaining(), BALANCE); // record the cancellation bool bValid = true; diff --git a/src/mastercore_mdex.h b/src/mastercore_mdex.h index 153fe7e4eb460..de3e6afa80351 100644 --- a/src/mastercore_mdex.h +++ b/src/mastercore_mdex.h @@ -80,6 +80,9 @@ class CMPMetaDEx XDOUBLE unitPrice() const; XDOUBLE inversePrice() const; + std::string displayUnitPrice() const; + std::string displayInversePrice() const; + void saveOffer(std::ofstream& file, SHA256_CTX* shaCtx) const; }; diff --git a/src/qt/forms/metadexdialog.ui b/src/qt/forms/metadexdialog.ui index 0eb1160a2a6b6..b64afae621b3d 100755 --- a/src/qt/forms/metadexdialog.ui +++ b/src/qt/forms/metadexdialog.ui @@ -378,7 +378,7 @@ - SELL OFFERS + BUY OFFERS @@ -398,7 +398,7 @@ - + 0 @@ -619,7 +619,7 @@ - BUY OFFERS + SELL OFFERS @@ -639,7 +639,7 @@ - + diff --git a/src/qt/metadexdialog.cpp b/src/qt/metadexdialog.cpp index 3ec3b4baea2af..14b85eea2d285 100755 --- a/src/qt/metadexdialog.cpp +++ b/src/qt/metadexdialog.cpp @@ -216,9 +216,6 @@ void MetaDExDialog::AddRow(bool useBuyList, bool includesMe, const string& price QTableWidgetItem *priceCell = new QTableWidgetItem(QString::fromStdString(price)); QTableWidgetItem *availableCell = new QTableWidgetItem(QString::fromStdString(available)); QTableWidgetItem *totalCell = new QTableWidgetItem(QString::fromStdString(total)); - priceCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter); - availableCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter); - totalCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter); if(includesMe) { QFont font; font.setBold(true); @@ -227,10 +224,16 @@ void MetaDExDialog::AddRow(bool useBuyList, bool includesMe, const string& price totalCell->setFont(font); } if (useBuyList) { - ui->buyList->setItem(workingRow, 0, priceCell); + priceCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter); + availableCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter); + totalCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter); + ui->buyList->setItem(workingRow, 0, totalCell); ui->buyList->setItem(workingRow, 1, availableCell); - ui->buyList->setItem(workingRow, 2, totalCell); + ui->buyList->setItem(workingRow, 2, priceCell); } else { + priceCell->setTextAlignment(Qt::AlignLeft + Qt::AlignVCenter); + availableCell->setTextAlignment(Qt::AlignLeft + Qt::AlignVCenter); + totalCell->setTextAlignment(Qt::AlignLeft + Qt::AlignVCenter); ui->sellList->setItem(workingRow, 0, priceCell); ui->sellList->setItem(workingRow, 1, availableCell); ui->sellList->setItem(workingRow, 2, totalCell); @@ -248,9 +251,8 @@ void MetaDExDialog::UpdateOffers() if ((useBuyList) && (((!testeco) && (my_it->first != OMNI_PROPERTY_MSC)) || ((testeco) && (my_it->first != OMNI_PROPERTY_TMSC)))) continue; md_PricesMap & prices = my_it->second; for (md_PricesMap::iterator it = prices.begin(); it != prices.end(); ++it) { // loop through the sell prices for the property - XDOUBLE unitPrice; - XDOUBLE inversePrice; - string unitPriceStr; + std::string unitPriceStr; + std::string inversePriceStr; int64_t available = 0, total = 0; bool includesMe = false; md_Set & indexes = (it->second); @@ -269,20 +271,16 @@ void MetaDExDialog::UpdateOffers() if(IsMyAddress(obj.getAddr())) includesMe = true; } } - unitPrice = obj.unitPrice(); // could be set multiple times but always a same price level - inversePrice = obj.inversePrice(); + unitPriceStr = obj.displayUnitPrice(); + inversePriceStr = obj.displayInversePrice(); } if ((available > 0) && (total > 0)) { // if there are any available at this price, add to the sell list string strAvail; if (isPropertyDivisible(global_metadex_market)) { strAvail = FormatDivisibleShortMP(available); } else { strAvail = FormatIndivisibleMP(available); } - - if ((!isPropertyDivisible(global_metadex_market)) && (useBuyList)) { inversePrice = inversePrice/COIN; } - if ((!isPropertyDivisible(global_metadex_market)) && (!useBuyList)) { unitPrice = unitPrice/COIN; } - if (useBuyList) { - AddRow(useBuyList, includesMe, StripTrailingZeros(inversePrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed)), strAvail, FormatDivisibleShortMP(total)); + AddRow(useBuyList, includesMe, StripTrailingZeros(inversePriceStr), strAvail, FormatDivisibleShortMP(total)); } else { - AddRow(useBuyList, includesMe, StripTrailingZeros(unitPrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed)), strAvail, FormatDivisibleShortMP(total)); + AddRow(useBuyList, includesMe, StripTrailingZeros(unitPriceStr), strAvail, FormatDivisibleShortMP(total)); } } } @@ -344,9 +342,9 @@ void MetaDExDialog::FullRefresh() ui->sellTotalLabel->setText("0.00000000 " + QString::fromStdString(primaryToken)); ui->sellTM->setText(QString::fromStdString(primaryToken)); ui->buyTM->setText(QString::fromStdString(primaryToken)); - ui->buyList->setHorizontalHeaderItem(0, new QTableWidgetItem("Unit Price (" + QString::fromStdString(primaryToken) + ")")); + ui->buyList->setHorizontalHeaderItem(0, new QTableWidgetItem("Total " + QString::fromStdString(primaryToken))); ui->buyList->setHorizontalHeaderItem(1, new QTableWidgetItem("Total SP#" + QString::fromStdString(FormatIndivisibleMP(global_metadex_market)))); - ui->buyList->setHorizontalHeaderItem(2, new QTableWidgetItem("Total " + QString::fromStdString(primaryToken))); + ui->buyList->setHorizontalHeaderItem(2, new QTableWidgetItem("Unit Price (" + QString::fromStdString(primaryToken) + ")")); ui->sellList->setHorizontalHeaderItem(0, new QTableWidgetItem("Unit Price (" + QString::fromStdString(primaryToken) + ")")); ui->sellList->setHorizontalHeaderItem(1, new QTableWidgetItem("Total SP#" + QString::fromStdString(FormatIndivisibleMP(global_metadex_market)))); ui->sellList->setHorizontalHeaderItem(2, new QTableWidgetItem("Total " + QString::fromStdString(primaryToken)));