[Dev] Documenting Feathercoin Specific Software settings - Part 9
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/base58.cpp
+ +bool CBitcoinAddress::GetScriptID(CScriptID &scriptID) const { + /* if (!IsValid()) + return false; + switch (vchVersion) { + case Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS): + case Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS_TEST): { + uint160 id; + memcpy(&id, &vchData[0], 20); + scriptID = CScriptID(id); + return true; + } + default: return false; + }*/ + if (!IsValid() || vchVersion != Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS)) + return false; + uint160 id; + memcpy(&id, &vchData[0], 20); + scriptID = CScriptID(id); + return true; +} +
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/base58.h
+ bool GetScriptID(CScriptID &scriptID) const;
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/bignum.h
+#include "util.h" // for uint64
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/chainparams.cpp
- //vSeeds.push_back(CDNSSeedData("block.ftc-c.com", "block.ftc-c.com")); - //vSeeds.push_back(CDNSSeedData("pool.ftc-c.com", "pool.ftc-c.com")); + vSeeds.push_back(CDNSSeedData("block.ftc-c.com", "block.ftc-c.com")); + vSeeds.push_back(CDNSSeedData("pool.ftc-c.com", "pool.ftc-c.com"));
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/core.h
+extern int nBestHeight; +static const unsigned int LOCKTIME_THRESHOLD2 = 500000000; // Tue Nov 5 00:53:20 1985 UTC
Code added
+ + bool IsFinal(int nBlockHeight=0, int64 nBlockTime=0) const + { + // Time based nLockTime implemented in 0.1.6 + if (nLockTime == 0) + return true; + if (nBlockHeight == 0) + nBlockHeight = nBestHeight; + if (nBlockTime == 0) + nBlockTime = GetAdjustedTime(); + if ((int64)nLockTime < ((int64)nLockTime < LOCKTIME_THRESHOLD2 ? (int64)nBlockHeight : nBlockTime)) + return true; + BOOST_FOREACH(const CTxIn& txin, vin) + if (!txin.IsFinal()) + return false; + return true; + }
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/Makefile.am
- forms/snapwidget.ui + forms/snapwidget.ui \ + forms/createmultisigaddrdialog.ui \ + forms/multisigdialog.ui
Code replaced
+ moc_reportview.cpp \ + moc_createmultisigaddrdialog.cpp \ + moc_multisigdialog.cpp + reportview.h \ + createmultisigaddrdialog.h \ + multisigdialog.h + res/icons/account-report.png \ + res/icons/multisig.png + qimagesource.cpp \ + createmultisigaddrdialog.cpp \ + multisigdialog.cpp
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/addressbookpage.cpp
+#include "signverifymessagedialog.h" +#include "wallet.h" +#include "walletmodel.h" +#include "init.h" +#include "base58.h" + +#include "walletview.h" +#include "createmultisigaddrdialog.h" +
Code added
+#include "json/json_spirit.h" +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_writer_template.h" +using namespace json_spirit; + + ui->signMessage->setVisible(false); + ui->signMessage->setVisible(true); + ui->newMultiSigAddress->setVisible(false); + QAction *sendCoinsAction = new QAction(tr("Send &Coins"), this); + QAction *signMessageAction = new QAction(ui->signMessage->text(), this); + QAction *verifyMessageAction = new QAction(ui->verifyMessage->text(), this); + QAction *copyPubKeyAction = new QAction(tr("Copy &Public Key"), this); + QAction *copyPriKeyAction = new QAction(tr("Copy Private Key"), this);
Code added
+ { contextMenu->addAction(deleteAction); + //contextMenu->addAction(sendCoinsAction); + }
Code added
+ if(tab == ReceivingTab) + { + contextMenu->addAction(signMessageAction); + contextMenu->addAction(copyPubKeyAction); + contextMenu->addAction(copyPriKeyAction); + } + else if(tab == SendingTab) + contextMenu->addAction(verifyMessageAction); + + QAction *MultiSigExportAction = new QAction(tr("Export MultiSig Address"), this); + contextMenu->addAction(MultiSigExportAction); + + contextMenuMultiSig = new QMenu(); + contextMenuMultiSig->addAction(copyAddressAction); + contextMenuMultiSig->addAction(copyLabelAction); + contextMenuMultiSig->addAction(editAction); + contextMenuMultiSig->addAction(deleteAction); + contextMenuMultiSig->addSeparator(); + //contextMenuMultiSig->addAction(sendCoinsAction); +#ifdef USE_QRCODE + contextMenuMultiSig->addAction(showQRCodeAction); +#endif + contextMenuMultiSig->addAction(MultiSigExportAction);
Code added
+ connect(signMessageAction, SIGNAL(triggered()), this, SLOT(on_signMessage_clicked())); + connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(on_verifyMessage_clicked())); + connect(copyPubKeyAction, SIGNAL(triggered()), this, SLOT(on_copyPubKey_clicked())); + connect(copyPriKeyAction, SIGNAL(triggered()), this, SLOT(on_copyPriKey_clicked())); + connect(ui->newMultiSigAddress, SIGNAL(clicked()), this, SLOT(createAddress())); + connect(MultiSigExportAction, SIGNAL(triggered()), this, SLOT(exportAddress())); + connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(onSendCoinsAction()));
Code added
-#if QT_VERSION < 0x050000 +/*#if QT_VERSION < 0x050000 -#endif +#endif*/
Code commented out
+ ui->tableView->horizontalHeader()->resizeSection(1, 850); + //ui->tableView->horizontalHeader()->resizeSection(2, 100); + ui->tableView->horizontalHeader()->setStretchLastSection(true);
UI code changed
+void AddressBookPage::on_copyPubKey_clicked() +{ + QModelIndexList selection = ui->tableView->selectionModel()->selectedRows(AddressTableModel::Address); + if(!selection.isEmpty()) + { + QString addrStr = selection.at(0).data(Qt::EditRole).toString(); + CBitcoinAddress address(addrStr.toStdString()); + CKeyID keyID; + if ( !address.GetKeyID(keyID) ) + { + QMessageBox::warning(this, windowTitle(), + tr("Address \"%1\" doesn't have public key ").arg(addrStr), + QMessageBox::Ok, QMessageBox::Ok); + return; + } + CPubKey vchPubKey; + if ( !pwalletMain->GetPubKey(keyID, vchPubKey)) + { + QMessageBox::warning(this, windowTitle(), + tr("Address \"%1\" doesn't have public key ").arg(addrStr), + QMessageBox::Ok, QMessageBox::Ok); + return; + } + GUIUtil::setClipboard(QString::fromStdString(HexStr(vchPubKey))); + } +} + +void AddressBookPage::on_copyPriKey_clicked() +{ + QModelIndexList selection = ui->tableView->selectionModel()->selectedRows(AddressTableModel::Address); + if(!selection.isEmpty()) + { + QString addrStr = selection.at(0).data(Qt::EditRole).toString(); + CBitcoinAddress address(addrStr.toStdString()); + CKeyID keyID; + if ( !address.GetKeyID(keyID) ) + { + QMessageBox::warning(this, windowTitle(), + tr("Address \"%1\" doesn't have public key ").arg(addrStr), + QMessageBox::Ok, QMessageBox::Ok); + return; + } + CSecret vchSecret; + bool fCompressed; + if (!pwalletMain->GetSecret(keyID, vchSecret, fCompressed)) + { + QMessageBox::warning(this, windowTitle(), + tr("Address \"%1\" doesn't have private key ").arg(addrStr), + QMessageBox::Ok, QMessageBox::Ok); + return; + } + GUIUtil::setClipboard(CBitcoinSecret(vchSecret, fCompressed).ToString().c_str()); + } +} + +void AddressBookPage::on_signMessage_clicked() +{ + QTableView *table = ui->tableView; + QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); + + foreach (QModelIndex index, indexes) + { + QString address = index.data().toString(); + //emit signMessage(address); + SignVerifyMessageDialog *signVerifyMessageDialog = new SignVerifyMessageDialog(this); + signVerifyMessageDialog->setAttribute(Qt::WA_DeleteOnClose); + //signVerifyMessageDialog->setModel(walletModel); + signVerifyMessageDialog->showTab_SM(true); + + if (!address.isEmpty()) + signVerifyMessageDialog->setAddress_SM(address); + } +} + +void AddressBookPage::on_verifyMessage_clicked() +{ + QTableView *table = ui->tableView; + QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); + + foreach (QModelIndex index, indexes) + { + QString address = index.data().toString(); + //emit verifyMessage(address); + SignVerifyMessageDialog *signVerifyMessageDialog = new SignVerifyMessageDialog(this); + signVerifyMessageDialog->setAttribute(Qt::WA_DeleteOnClose); + //signVerifyMessageDialog->setModel(walletModel); + signVerifyMessageDialog->showTab_VM(true); + + if (!address.isEmpty()) + signVerifyMessageDialog->setAddress_VM(address); + } +} +
Section of code added
+ //contextMenu->exec(QCursor::pos()); + QTableView *table = ui->tableView; + QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Category); + + foreach (QModelIndex index1, indexes){ + QString Category = index1.data().toString(); + if ( Category == "MultiSig" ) + contextMenuMultiSig->exec(QCursor::pos()); + else + contextMenu->exec(QCursor::pos()); + + break; + }
Code replaced
+ +void AddressBookPage::onSendCoinsAction() +{ + QTableView *table = ui->tableView; + QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); + + foreach (QModelIndex index, indexes) + { + QString address = index.data().toString(); + emit sendCoins(address); + //parent.gotoSendCoinsPage(address); + //WalletView(&parent)->gotoSendCoinsPage(address); + close(); + } +} + +void AddressBookPage::createAddress() +{ + CreateMultiSigAddrDialog dlg(this); + if(dlg.exec()) + { + } +} + +bool writeString(const QString &filename, const QString& hex); +void AddressBookPage::exportAddress() +{ + QString s; + QTableView *table = ui->tableView; + QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); + + //foreach (QModelIndex index, indexes) + s = indexes[0].data().toString(); + + CBitcoinAddress address(s.toStdString()); + + CScript subscript; + CScriptID scriptID; + address.GetScriptID(scriptID); + pwalletMain->GetCScript(scriptID, subscript); + + json_spirit::Object addrJson; + addrJson.push_back(json_spirit::Pair("address", address.ToString())); + addrJson.push_back(json_spirit::Pair("redeemScript", HexStr(subscript.begin(), subscript.end()))); + std::string ss = json_spirit::write_string(json_spirit::Value(addrJson), false); + QString addrJsonStr = QString::fromStdString(ss); + + QString filename = GUIUtil::getSaveFileName( + this, + tr("Save MultiSig Address"), QString(), + tr("MultiSig Address file (*.msa)"), NULL); + + if (filename.isNull()) return; + + if(!writeString(filename, addrJsonStr)) + { + QMessageBox::critical(this, tr("Exporting Failed"), tr("Could not write to file %1.").arg(filename), + QMessageBox::Abort, QMessageBox::Abort); + } +}
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/addressbookpage.h
+ QMenu *contextMenuMultiSig;
Code added
+ /** Copy public key of currently selected address to clipboard */ + void on_copyPubKey_clicked(); + /** Copy private key of currently selected address to clipboard */ + void on_copyPriKey_clicked(); + /** Open the sign message tab in the Sign/Verify Message dialog with currently selected address */ + void on_signMessage_clicked(); + /** Open the verify message tab in the Sign/Verify Message dialog with currently selected address */ + void on_verifyMessage_clicked(); + /** Open send coins dialog for currently selected address (no button) */ + void onSendCoinsAction();
Code added
+ + void createAddress(); + void exportAddress();
Code added
+ void signMessage(QString addr); + void verifyMessage(QString addr);
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/addresstablemodel.cpp
+ + enum Category { + Normal, + MultiSig + };
Code added
+ AddressTableEntry() { categoryStrList << "Normal" << "MultiSig"; } + AddressTableEntry(Type type, const QString &label, const QString &address, const bool &stealth = false, Category cate = Normal): + type(type), label(label), address(address), stealth(stealth), category(cate) { categoryStrList << "Normal" << "MultiSig"; }
Code replaced
+ const std::string& strName = item.second.name; + bool fMyShare = IsMyShare(*wallet, address.Get());
Code added
+ AddressTableEntry::Category cate = AddressTableEntry::Normal; + if ( fMyShare ) + { + cate = AddressTableEntry::MultiSig; + addressType = AddressTableEntry::Sending; + }
Code replaced
+ QString::fromStdString(address.ToString()),false,cate));
Code replaced
+ true,AddressTableEntry::Normal));
Code replaced
- cachedAddressTable.insert(lowerIndex, + } parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex);
AddressTableEntry(newEntryType, label, address));
+ if (address.at(0)==âfâ)
+ {
+ cachedAddressTable.insert(lowerIndex, AddressTableEntry(newEntryType, label, address,false,AddressTableEntry::MultiSig));
+ }
+ else
+ {
+ cachedAddressTable.insert(lowerIndex, AddressTableEntry(newEntryType, label, address,false,AddressTableEntry::Normal));
+ }Code replaced
+ //columns << tr("Label") << tr("Address")<< tr("Category"); + case Category: + //return rec->categoryStrList[rec->category]; + return rec->category;
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/addresstablemodel.h
+ Label = 0, /**< User specified label */ Address = 1, /**< Bitcoin address */ - Type = 2 /**< Address type */ + Type = 2, /**< Address type */ + Category = 3 /**< Address Category : Normal or MultiSig*/
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/bitcoingui.cpp
+ + multiSigAction = new QAction(QIcon(":/icons/multisig"), tr("&MultiSig"), this); + multiSigAction->setStatusTip(tr("Manage MultiSig transactions")); + multiSigAction->setToolTip(multiSigAction->statusTip()); + multiSigAction->setCheckable(true); + multiSigAction->setShortcut(QKeySequence(Qt::ALT+ Qt::Key_6)); + tabGroup->addAction(multiSigAction);
Code added
+ connect(multiSigAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); + connect(multiSigAction, SIGNAL(triggered()), this, SLOT(gotoMultiSigPage())); + advanced->addAction(multiSigAction); + toolbar->addAction(multiSigAction); + multiSigAction->setEnabled(enabled); +void BitcoinGUI::gotoMultiSigPage() +{ + multiSigAction->setChecked(true); + if (walletFrame) walletFrame->gotoMultiSigPage(); +} +
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/bitcoingui.h
+ QAction *multiSigAction;
Code added
+ /** Switch to MultiSig page */ + void gotoMultiSigPage(); +
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/createmultisigaddrdialog.cpp
New file Large amount of new code, 298 lines
+#include "createmultisigaddrdialog.h" +#include "ui_createmultisigaddrdialog.h" + +#include "addresstablemodel.h" +#include "guiutil.h" + +#include "wallet.h" +#include "base58.h" +#include "init.h" +#include "util.h" + +#include "json/json_spirit.h" +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_writer_template.h" +using namespace json_spirit; + +#include <QSortFilterProxyModel> +#include <QClipboard> +#include <QMessageBox> +#include <QMenu> +#include <QTextDocument> +#include <QScrollBar> +#include <QFile> +#include <QTextStream> +#include <QDataWidgetMapper> + +CreateMultiSigAddrDialog::CreateMultiSigAddrDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::CreateMultiSigAddrDialog) +{ + ui->setupUi(this); + + connect(ui->btnCreate, SIGNAL(clicked()), this, SLOT(create())); + connect(ui->btnCancel, SIGNAL(clicked()), this, SLOT(cancel())); + + ui->comboBoxRequire->addItem(QString("1"), QVariant(1)); + ui->comboBoxRequire->addItem(QString("2"), QVariant(2)); + ui->comboBoxRequire->addItem(QString("3"), QVariant(3)); + ui->comboBoxRequire->setCurrentIndex(1); + + ui->comboBoxTotal->addItem(QString("2"), QVariant(2)); + ui->comboBoxTotal->addItem(QString("3"), QVariant(3)); + ui->comboBoxTotal->setCurrentIndex(0); + currentPubkeyNum = 2; + connect(ui->comboBoxTotal, SIGNAL(currentIndexChanged(int)), this, SLOT(handleSelectionChanged(int)));
Start of new file code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/createmultisigaddrdialog.h
New file 40 lines code
+#ifndef CREATEMULTISIGADDRESSDIALOG_H +#define CREATEMULTISIGADDRESSDIALOG_H + +#include <QDialog> + +QT_BEGIN_NAMESPACE +class QLabel; +QT_END_NAMESPACE + +namespace Ui { + class CreateMultiSigAddrDialog; +} + +/** Dialog for editing an address and associated information. + */ +class CreateMultiSigAddrDialog : public QDialog +{ + Q_OBJECT + +public: + explicit CreateMultiSigAddrDialog(QWidget *parent = 0); + ~CreateMultiSigAddrDialog(); + +public slots: + void create(); + void cancel(); + void handleSelectionChanged(int idx); + void onTextChanged0(const QString & text); + void onTextChanged1(const QString & text); + void onTextChanged2(const QString & text); + void importAddress(); + void updatePromptText(); + +private: + Ui::CreateMultiSigAddrDialog *ui; + int currentPubkeyNum; + void onTextChanged(QLabel* label, const QString & text); +}; + +#endif // CREATEMULTISIGADDRESSDIALOG_H
Code added new file
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/editaddressdialog.cpp
+ tr("The entered address \"%1\" is not a valid Feathercoin address.").arg(ui->addressEdit->text()),
Name change to Feathercoin
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/feathercoin.qrc
+ <file alias="multisig">res/icons/multisig.png</file>
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/forms/addressbookpage.ui
Amount of ui changes
+ <string>&New Address</string> + </property> + <property name="icon"> + <iconset resource="../feathercoin.qrc"> + <normaloff>:/icons/add</normaloff>:/icons/add</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="newMultiSigAddress"> + <property name="text"> + <string>New MultiSig</string>
Example code replaced
+ <widget class="QPushButton" name="signMessage"> + <property name="toolTip"> + <string>Sign a message to prove you own a FTC address</string> + </property> + <property name="text"> + <string>Sign &Message</string> + </property> + <property name="icon"> + <iconset resource="../feathercoin.qrc"> + <normaloff>:/icons/edit</normaloff>:/icons/edit</iconset> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="verifyMessage"> + <property name="toolTip"> + <string>Verify a message to ensure it was signed with a specified FTC address</string> + </property> + <property name="text"> + <string>&Verify Message</string> + </property> + <property name="icon"> + <iconset resource="../feathercoin.qrc"> + <normaloff>:/icons/transaction_0</normaloff>:/icons/transaction_0</iconset> + </property> + </widget> + </item> + <item>
Code replaced
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/forms/createmultisigaddrdialog.ui
Large new file, 159 lines of code
+<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>CreateMultiSigAddrDialog</class> + <widget class="QDialog" name="CreateMultiSigAddrDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>506</width> + <height>209</height> + </rect> + </property> + <property name="windowTitle"> + <string>Create MultiSig Address</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QLabel" name="label0"> + <property name="text"> + <string>PublicKey</string> + </property> + </widget> + </item>
Example new code
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/forms/multisigdialog.ui
New file, 729 lines of code
+<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MultiSigDialog</class> + <widget class="QDialog" name="MultiSigDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>850</width> + <height>400</height> + </rect> + </property> + <property name="windowTitle"> + <string>Send Coins</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0"> + <property name="bottomMargin"> + <number>8</number> + </property> + <item> + <widget class="QFrame" name="frameCoinControl">
Code added
-
Feathercoin specific changes made to convert Bitcoin to FTC 0.9.6.*
Add Multisgin Page : - commit
https://github.com/FeatherCoin/Feathercoin/commit/83737e90c292f18fe0285677cefbd70125492e1a
Include a multi-signature address Page
src/qt/guiutil.cpp
+QString getLoadFileName(QWidget *parent, const QString &caption, + const QString &dir, + const QString &filter, + QString *selectedSuffixOut) +{ + QString selectedFilter; + QString myDir; + if(dir.isEmpty()) // Default to user documents location + { +#if QT_VERSION < 0x050000 + myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); +#else + myDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); +#endif + } + else + { + myDir = dir; + } + QString result = QFileDialog::getOpenFileName(parent, caption, myDir, filter, &selectedFilter); + + /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ + QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); + QString selectedSuffix; + if(filter_re.exactMatch(selectedFilter)) + { + selectedSuffix = filter_re.cap(1); + } + + /* Add suffix if needed */ + QFileInfo info(result); + if(!result.isEmpty()) + { + if(info.suffix().isEmpty() && !selectedSuffix.isEmpty()) + { + /* No suffix specified, add selected suffix */ + if(!result.endsWith(".")) + result.append("."); + result.append(selectedSuffix); + } + } + + /* Return selected suffix if asked to */ + if(selectedSuffixOut) + { + *selectedSuffixOut = selectedSuffix; + } + return result; +} +
Code added