Duke Leto
5 years ago
12 changed files with 0 additions and 2473 deletions
@ -1,418 +0,0 @@ |
|||
bin_PROGRAMS += qt/komodo-qt |
|||
EXTRA_LIBRARIES += qt/libbitcoinqt.a |
|||
|
|||
# bitcoin qt core #
|
|||
QT_TS = \
|
|||
qt/locale/bitcoin_ach.ts \
|
|||
qt/locale/bitcoin_af_ZA.ts \
|
|||
qt/locale/bitcoin_ar.ts \
|
|||
qt/locale/bitcoin_be_BY.ts \
|
|||
qt/locale/bitcoin_bg.ts \
|
|||
qt/locale/bitcoin_bs.ts \
|
|||
qt/locale/bitcoin_ca_ES.ts \
|
|||
qt/locale/bitcoin_ca.ts \
|
|||
qt/locale/bitcoin_ca@valencia.ts \
|
|||
qt/locale/bitcoin_cmn.ts \
|
|||
qt/locale/bitcoin_cs.ts \
|
|||
qt/locale/bitcoin_cy.ts \
|
|||
qt/locale/bitcoin_da.ts \
|
|||
qt/locale/bitcoin_de.ts \
|
|||
qt/locale/bitcoin_el_GR.ts \
|
|||
qt/locale/bitcoin_en.ts \
|
|||
qt/locale/bitcoin_eo.ts \
|
|||
qt/locale/bitcoin_es_CL.ts \
|
|||
qt/locale/bitcoin_es_DO.ts \
|
|||
qt/locale/bitcoin_es_MX.ts \
|
|||
qt/locale/bitcoin_es.ts \
|
|||
qt/locale/bitcoin_es_UY.ts \
|
|||
qt/locale/bitcoin_et.ts \
|
|||
qt/locale/bitcoin_eu_ES.ts \
|
|||
qt/locale/bitcoin_fa_IR.ts \
|
|||
qt/locale/bitcoin_fa.ts \
|
|||
qt/locale/bitcoin_fi.ts \
|
|||
qt/locale/bitcoin_fr_CA.ts \
|
|||
qt/locale/bitcoin_fr.ts \
|
|||
qt/locale/bitcoin_gl.ts \
|
|||
qt/locale/bitcoin_gu_IN.ts \
|
|||
qt/locale/bitcoin_he.ts \
|
|||
qt/locale/bitcoin_hi_IN.ts \
|
|||
qt/locale/bitcoin_hr.ts \
|
|||
qt/locale/bitcoin_hu.ts \
|
|||
qt/locale/bitcoin_id_ID.ts \
|
|||
qt/locale/bitcoin_it.ts \
|
|||
qt/locale/bitcoin_ja.ts \
|
|||
qt/locale/bitcoin_ka.ts \
|
|||
qt/locale/bitcoin_kk_KZ.ts \
|
|||
qt/locale/bitcoin_ko_KR.ts \
|
|||
qt/locale/bitcoin_ky.ts \
|
|||
qt/locale/bitcoin_la.ts \
|
|||
qt/locale/bitcoin_lt.ts \
|
|||
qt/locale/bitcoin_lv_LV.ts \
|
|||
qt/locale/bitcoin_mn.ts \
|
|||
qt/locale/bitcoin_ms_MY.ts \
|
|||
qt/locale/bitcoin_nb.ts \
|
|||
qt/locale/bitcoin_nl.ts \
|
|||
qt/locale/bitcoin_pam.ts \
|
|||
qt/locale/bitcoin_pl.ts \
|
|||
qt/locale/bitcoin_pt_BR.ts \
|
|||
qt/locale/bitcoin_pt_PT.ts \
|
|||
qt/locale/bitcoin_ro_RO.ts \
|
|||
qt/locale/bitcoin_ru.ts \
|
|||
qt/locale/bitcoin_sah.ts \
|
|||
qt/locale/bitcoin_sk.ts \
|
|||
qt/locale/bitcoin_sl_SI.ts \
|
|||
qt/locale/bitcoin_sq.ts \
|
|||
qt/locale/bitcoin_sr.ts \
|
|||
qt/locale/bitcoin_sv.ts \
|
|||
qt/locale/bitcoin_th_TH.ts \
|
|||
qt/locale/bitcoin_tr.ts \
|
|||
qt/locale/bitcoin_uk.ts \
|
|||
qt/locale/bitcoin_ur_PK.ts \
|
|||
qt/locale/bitcoin_uz@Cyrl.ts \
|
|||
qt/locale/bitcoin_vi.ts \
|
|||
qt/locale/bitcoin_vi_VN.ts \
|
|||
qt/locale/bitcoin_zh_CN.ts \
|
|||
qt/locale/bitcoin_zh_HK.ts \
|
|||
qt/locale/bitcoin_zh_TW.ts |
|||
|
|||
QT_FORMS_UI = \
|
|||
qt/forms/addressbookpage.ui \
|
|||
qt/forms/askpassphrasedialog.ui \
|
|||
qt/forms/coincontroldialog.ui \
|
|||
qt/forms/editaddressdialog.ui \
|
|||
qt/forms/helpmessagedialog.ui \
|
|||
qt/forms/intro.ui \
|
|||
qt/forms/openuridialog.ui \
|
|||
qt/forms/optionsdialog.ui \
|
|||
qt/forms/overviewpage.ui \
|
|||
qt/forms/receivecoinsdialog.ui \
|
|||
qt/forms/receiverequestdialog.ui \
|
|||
qt/forms/rpcconsole.ui \
|
|||
qt/forms/sendcoinsdialog.ui \
|
|||
qt/forms/sendcoinsentry.ui \
|
|||
qt/forms/signverifymessagedialog.ui \
|
|||
qt/forms/transactiondescdialog.ui |
|||
|
|||
QT_MOC_CPP = \
|
|||
qt/moc_addressbookpage.cpp \
|
|||
qt/moc_addresstablemodel.cpp \
|
|||
qt/moc_askpassphrasedialog.cpp \
|
|||
qt/moc_bitcoinaddressvalidator.cpp \
|
|||
qt/moc_bitcoinamountfield.cpp \
|
|||
qt/moc_bitcoingui.cpp \
|
|||
qt/moc_bitcoinunits.cpp \
|
|||
qt/moc_clientmodel.cpp \
|
|||
qt/moc_coincontroldialog.cpp \
|
|||
qt/moc_coincontroltreewidget.cpp \
|
|||
qt/moc_csvmodelwriter.cpp \
|
|||
qt/moc_editaddressdialog.cpp \
|
|||
qt/moc_guiutil.cpp \
|
|||
qt/moc_intro.cpp \
|
|||
qt/moc_macdockiconhandler.cpp \
|
|||
qt/moc_macnotificationhandler.cpp \
|
|||
qt/moc_notificator.cpp \
|
|||
qt/moc_openuridialog.cpp \
|
|||
qt/moc_optionsdialog.cpp \
|
|||
qt/moc_optionsmodel.cpp \
|
|||
qt/moc_overviewpage.cpp \
|
|||
qt/moc_peertablemodel.cpp \
|
|||
qt/moc_paymentserver.cpp \
|
|||
qt/moc_qvalidatedlineedit.cpp \
|
|||
qt/moc_qvaluecombobox.cpp \
|
|||
qt/moc_receivecoinsdialog.cpp \
|
|||
qt/moc_receiverequestdialog.cpp \
|
|||
qt/moc_recentrequeststablemodel.cpp \
|
|||
qt/moc_rpcconsole.cpp \
|
|||
qt/moc_sendcoinsdialog.cpp \
|
|||
qt/moc_sendcoinsentry.cpp \
|
|||
qt/moc_signverifymessagedialog.cpp \
|
|||
qt/moc_splashscreen.cpp \
|
|||
qt/moc_trafficgraphwidget.cpp \
|
|||
qt/moc_transactiondesc.cpp \
|
|||
qt/moc_transactiondescdialog.cpp \
|
|||
qt/moc_transactionfilterproxy.cpp \
|
|||
qt/moc_transactiontablemodel.cpp \
|
|||
qt/moc_transactionview.cpp \
|
|||
qt/moc_utilitydialog.cpp \
|
|||
qt/moc_walletframe.cpp \
|
|||
qt/moc_walletmodel.cpp \
|
|||
qt/moc_walletview.cpp |
|||
|
|||
BITCOIN_MM = \
|
|||
qt/macdockiconhandler.mm \
|
|||
qt/macnotificationhandler.mm |
|||
|
|||
QT_MOC = \
|
|||
qt/bitcoin.moc \
|
|||
qt/bitcoinamountfield.moc \
|
|||
qt/intro.moc \
|
|||
qt/overviewpage.moc \
|
|||
qt/rpcconsole.moc |
|||
|
|||
QT_QRC_CPP = qt/qrc_bitcoin.cpp |
|||
QT_QRC = qt/bitcoin.qrc |
|||
QT_QRC_LOCALE_CPP = qt/qrc_bitcoin_locale.cpp |
|||
QT_QRC_LOCALE = qt/bitcoin_locale.qrc |
|||
|
|||
PROTOBUF_CC = qt/paymentrequest.pb.cc |
|||
PROTOBUF_H = qt/paymentrequest.pb.h |
|||
PROTOBUF_PROTO = qt/paymentrequest.proto |
|||
|
|||
BITCOIN_QT_H = \
|
|||
qt/addressbookpage.h \
|
|||
qt/addresstablemodel.h \
|
|||
qt/askpassphrasedialog.h \
|
|||
qt/bitcoinaddressvalidator.h \
|
|||
qt/bitcoinamountfield.h \
|
|||
qt/bitcoingui.h \
|
|||
qt/bitcoinunits.h \
|
|||
qt/clientmodel.h \
|
|||
qt/coincontroldialog.h \
|
|||
qt/coincontroltreewidget.h \
|
|||
qt/csvmodelwriter.h \
|
|||
qt/editaddressdialog.h \
|
|||
qt/guiconstants.h \
|
|||
qt/guiutil.h \
|
|||
qt/intro.h \
|
|||
qt/macdockiconhandler.h \
|
|||
qt/macnotificationhandler.h \
|
|||
qt/networkstyle.h \
|
|||
qt/notificator.h \
|
|||
qt/openuridialog.h \
|
|||
qt/optionsdialog.h \
|
|||
qt/optionsmodel.h \
|
|||
qt/overviewpage.h \
|
|||
qt/paymentrequestplus.h \
|
|||
qt/paymentserver.h \
|
|||
qt/peertablemodel.h \
|
|||
qt/qvalidatedlineedit.h \
|
|||
qt/qvaluecombobox.h \
|
|||
qt/receivecoinsdialog.h \
|
|||
qt/receiverequestdialog.h \
|
|||
qt/recentrequeststablemodel.h \
|
|||
qt/rpcconsole.h \
|
|||
qt/scicon.h \
|
|||
qt/sendcoinsdialog.h \
|
|||
qt/sendcoinsentry.h \
|
|||
qt/signverifymessagedialog.h \
|
|||
qt/splashscreen.h \
|
|||
qt/trafficgraphwidget.h \
|
|||
qt/transactiondesc.h \
|
|||
qt/transactiondescdialog.h \
|
|||
qt/transactionfilterproxy.h \
|
|||
qt/transactionrecord.h \
|
|||
qt/transactiontablemodel.h \
|
|||
qt/transactionview.h \
|
|||
qt/utilitydialog.h \
|
|||
qt/walletframe.h \
|
|||
qt/walletmodel.h \
|
|||
qt/walletmodeltransaction.h \
|
|||
qt/walletview.h \
|
|||
qt/winshutdownmonitor.h |
|||
|
|||
RES_ICONS = \
|
|||
qt/res/icons/add.png \
|
|||
qt/res/icons/address-book.png \
|
|||
qt/res/icons/about.png \
|
|||
qt/res/icons/about_qt.png \
|
|||
qt/res/icons/bitcoin.ico \
|
|||
qt/res/icons/bitcoin.png \
|
|||
qt/res/icons/clock1.png \
|
|||
qt/res/icons/clock2.png \
|
|||
qt/res/icons/clock3.png \
|
|||
qt/res/icons/clock4.png \
|
|||
qt/res/icons/clock5.png \
|
|||
qt/res/icons/configure.png \
|
|||
qt/res/icons/connect0.png \
|
|||
qt/res/icons/connect1.png \
|
|||
qt/res/icons/connect2.png \
|
|||
qt/res/icons/connect3.png \
|
|||
qt/res/icons/connect4.png \
|
|||
qt/res/icons/debugwindow.png \
|
|||
qt/res/icons/edit.png \
|
|||
qt/res/icons/editcopy.png \
|
|||
qt/res/icons/editpaste.png \
|
|||
qt/res/icons/export.png \
|
|||
qt/res/icons/eye.png \
|
|||
qt/res/icons/eye_minus.png \
|
|||
qt/res/icons/eye_plus.png \
|
|||
qt/res/icons/filesave.png \
|
|||
qt/res/icons/history.png \
|
|||
qt/res/icons/info.png \
|
|||
qt/res/icons/key.png \
|
|||
qt/res/icons/lock_closed.png \
|
|||
qt/res/icons/lock_open.png \
|
|||
qt/res/icons/open.png \
|
|||
qt/res/icons/overview.png \
|
|||
qt/res/icons/quit.png \
|
|||
qt/res/icons/receive.png \
|
|||
qt/res/icons/remove.png \
|
|||
qt/res/icons/send.png \
|
|||
qt/res/icons/synced.png \
|
|||
qt/res/icons/transaction0.png \
|
|||
qt/res/icons/transaction2.png \
|
|||
qt/res/icons/transaction_conflicted.png \
|
|||
qt/res/icons/tx_inout.png \
|
|||
qt/res/icons/tx_input.png \
|
|||
qt/res/icons/tx_output.png \
|
|||
qt/res/icons/tx_mined.png \
|
|||
qt/res/icons/warning.png \
|
|||
qt/res/icons/verify.png |
|||
|
|||
BITCOIN_QT_CPP = \
|
|||
qt/bitcoinaddressvalidator.cpp \
|
|||
qt/bitcoinamountfield.cpp \
|
|||
qt/bitcoingui.cpp \
|
|||
qt/bitcoinunits.cpp \
|
|||
qt/clientmodel.cpp \
|
|||
qt/csvmodelwriter.cpp \
|
|||
qt/guiutil.cpp \
|
|||
qt/intro.cpp \
|
|||
qt/networkstyle.cpp \
|
|||
qt/notificator.cpp \
|
|||
qt/optionsdialog.cpp \
|
|||
qt/optionsmodel.cpp \
|
|||
qt/peertablemodel.cpp \
|
|||
qt/qvalidatedlineedit.cpp \
|
|||
qt/qvaluecombobox.cpp \
|
|||
qt/rpcconsole.cpp \
|
|||
qt/scicon.cpp \
|
|||
qt/splashscreen.cpp \
|
|||
qt/trafficgraphwidget.cpp \
|
|||
qt/utilitydialog.cpp |
|||
|
|||
if TARGET_WINDOWS |
|||
BITCOIN_QT_CPP += qt/winshutdownmonitor.cpp |
|||
endif |
|||
|
|||
if ENABLE_WALLET |
|||
BITCOIN_QT_CPP += \
|
|||
qt/addressbookpage.cpp \
|
|||
qt/addresstablemodel.cpp \
|
|||
qt/askpassphrasedialog.cpp \
|
|||
qt/coincontroldialog.cpp \
|
|||
qt/coincontroltreewidget.cpp \
|
|||
qt/editaddressdialog.cpp \
|
|||
qt/openuridialog.cpp \
|
|||
qt/overviewpage.cpp \
|
|||
qt/paymentrequestplus.cpp \
|
|||
qt/paymentserver.cpp \
|
|||
qt/receivecoinsdialog.cpp \
|
|||
qt/receiverequestdialog.cpp \
|
|||
qt/recentrequeststablemodel.cpp \
|
|||
qt/sendcoinsdialog.cpp \
|
|||
qt/sendcoinsentry.cpp \
|
|||
qt/signverifymessagedialog.cpp \
|
|||
qt/transactiondesc.cpp \
|
|||
qt/transactiondescdialog.cpp \
|
|||
qt/transactionfilterproxy.cpp \
|
|||
qt/transactionrecord.cpp \
|
|||
qt/transactiontablemodel.cpp \
|
|||
qt/transactionview.cpp \
|
|||
qt/walletframe.cpp \
|
|||
qt/walletmodel.cpp \
|
|||
qt/walletmodeltransaction.cpp \
|
|||
qt/walletview.cpp |
|||
endif |
|||
|
|||
RES_IMAGES = |
|||
|
|||
RES_MOVIES = $(wildcard qt/res/movies/spinner-*.png) |
|||
|
|||
BITCOIN_RC = qt/res/komodo-qt-res.rc |
|||
|
|||
BITCOIN_QT_INCLUDES = -I$(builddir)/qt -I$(srcdir)/qt -I$(srcdir)/qt/forms \
|
|||
-I$(builddir)/qt/forms -DQT_NO_KEYWORDS |
|||
|
|||
qt_libbitcoinqt_a_CPPFLAGS = $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
|
|||
$(QT_INCLUDES) $(QT_DBUS_INCLUDES) $(PROTOBUF_CFLAGS) $(QR_CFLAGS) |
|||
|
|||
qt_libbitcoinqt_a_SOURCES = $(BITCOIN_QT_CPP) $(BITCOIN_QT_H) $(QT_FORMS_UI) \
|
|||
$(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) |
|||
|
|||
nodist_qt_libbitcoinqt_a_SOURCES = $(QT_MOC_CPP) $(QT_MOC) $(PROTOBUF_CC) \
|
|||
$(PROTOBUF_H) $(QT_QRC_CPP) $(QT_QRC_LOCALE_CPP) |
|||
|
|||
# forms/foo.h -> forms/ui_foo.h
|
|||
QT_FORMS_H=$(join $(dir $(QT_FORMS_UI)),$(addprefix ui_, $(notdir $(QT_FORMS_UI:.ui=.h)))) |
|||
|
|||
# Most files will depend on the forms and moc files as includes. Generate them
|
|||
# before anything else.
|
|||
$(QT_MOC): $(QT_FORMS_H) |
|||
$(qt_libbitcoinqt_a_OBJECTS) $(qt_komodo_qt_OBJECTS) : | $(QT_MOC) |
|||
|
|||
#Generating these with a half-written protobuf header leads to wacky results.
|
|||
#This makes sure it's done.
|
|||
$(QT_MOC): $(PROTOBUF_H) |
|||
$(QT_MOC_CPP): $(PROTOBUF_H) |
|||
|
|||
# bitcoin-qt binary #
|
|||
qt_komodo_qt_CPPFLAGS = $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
|
|||
$(QT_INCLUDES) $(PROTOBUF_CFLAGS) $(QR_CFLAGS) |
|||
|
|||
qt_komodo_qt_SOURCES = qt/bitcoin.cpp |
|||
if TARGET_DARWIN |
|||
qt_komodo_qt_SOURCES += $(BITCOIN_MM) |
|||
endif |
|||
if TARGET_WINDOWS |
|||
qt_komodo_qt_SOURCES += $(BITCOIN_RC) |
|||
endif |
|||
qt_komodo_qt_LDADD = qt/libbitcoinqt.a $(LIBBITCOIN_SERVER) |
|||
if ENABLE_WALLET |
|||
qt_komodo_qt_LDADD += $(LIBBITCOIN_WALLET) |
|||
endif |
|||
qt_komodo_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) \
|
|||
$(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) $(LIBZCASH_LIBS) |
|||
qt_komodo_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) |
|||
qt_komodo_qt_LIBTOOLFLAGS = --tag CXX |
|||
|
|||
#locale/foo.ts -> locale/foo.qm
|
|||
QT_QM=$(QT_TS:.ts=.qm) |
|||
|
|||
SECONDARY: $(QT_QM) |
|||
|
|||
qt/bitcoinstrings.cpp: $(libbitcoin_server_a_SOURCES) $(libbitcoin_wallet_a_SOURCES) |
|||
@test -n $(XGETTEXT) || echo "xgettext is required for updating translations" |
|||
$(AM_V_GEN) cd $(srcdir); XGETTEXT=$(XGETTEXT) ../share/qt/extract_strings_qt.py $^ |
|||
|
|||
translate: qt/bitcoinstrings.cpp $(QT_FORMS_UI) $(QT_FORMS_UI) $(BITCOIN_QT_CPP) $(BITCOIN_QT_H) $(BITCOIN_MM) |
|||
@test -n $(LUPDATE) || echo "lupdate is required for updating translations" |
|||
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LUPDATE) $^ -locations relative -no-obsolete -ts qt/locale/bitcoin_en.ts |
|||
|
|||
$(QT_QRC_LOCALE_CPP): $(QT_QRC_LOCALE) $(QT_QM) |
|||
@test -f $(RCC) |
|||
@test -f $(@D)/$(<F) || cp -f $< $(@D) |
|||
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) -name bitcoin_locale $(@D)/$(<F) | \
|
|||
$(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ |
|||
|
|||
$(QT_QRC_CPP): $(QT_QRC) $(QT_FORMS_H) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) $(PROTOBUF_H) |
|||
@test -f $(RCC) |
|||
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) -name bitcoin $< | \
|
|||
$(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ |
|||
|
|||
CLEAN_QT = $(nodist_qt_libbitcoinqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno |
|||
|
|||
CLEANFILES += $(CLEAN_QT) |
|||
|
|||
komodo_qt_clean: FORCE |
|||
rm -f $(CLEAN_QT) $(qt_libbitcoinqt_a_OBJECTS) $(qt_komodo_qt_OBJECTS) qt/bitcoin-qt$(EXEEXT) $(LIBBITCOINQT) |
|||
|
|||
komodo_qt : qt/bitcoin-qt$(EXEEXT) |
|||
|
|||
ui_%.h: %.ui |
|||
@test -f $(UIC) |
|||
@$(MKDIR_P) $(@D) |
|||
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(UIC) -o $@ $< || (echo "Error creating $@"; false) |
|||
|
|||
%.moc: %.cpp |
|||
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(MOC) $(QT_INCLUDES) $(MOC_DEFS) $< | \
|
|||
$(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ |
|||
|
|||
moc_%.cpp: %.h |
|||
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(MOC) $(QT_INCLUDES) $(MOC_DEFS) $< | \
|
|||
$(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ |
|||
|
|||
%.qm: %.ts |
|||
@test -f $(LRELEASE) |
|||
@$(MKDIR_P) $(@D) |
|||
$(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LRELEASE) -silent $< -qm $@ |
@ -1,48 +0,0 @@ |
|||
bin_PROGRAMS += qt/test/test_bitcoin-qt |
|||
TESTS += qt/test/test_bitcoin-qt |
|||
|
|||
TEST_QT_MOC_CPP = qt/test/moc_uritests.cpp |
|||
|
|||
if ENABLE_WALLET |
|||
TEST_QT_MOC_CPP += qt/test/moc_paymentservertests.cpp |
|||
endif |
|||
|
|||
TEST_QT_H = \
|
|||
qt/test/uritests.h \
|
|||
qt/test/paymentrequestdata.h \
|
|||
qt/test/paymentservertests.h |
|||
|
|||
qt_test_test_komodo_qt_CPPFLAGS = $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \
|
|||
$(QT_INCLUDES) $(QT_TEST_INCLUDES) $(PROTOBUF_CFLAGS) |
|||
|
|||
qt_test_test_komodo_qt_SOURCES = \
|
|||
qt/test/test_main.cpp \
|
|||
qt/test/uritests.cpp \
|
|||
$(TEST_QT_H) |
|||
if ENABLE_WALLET |
|||
qt_test_test_komodo_qt_SOURCES += \
|
|||
qt/test/paymentservertests.cpp |
|||
endif |
|||
|
|||
nodist_qt_test_test_komodo_qt_SOURCES = $(TEST_QT_MOC_CPP) |
|||
|
|||
qt_test_test_komodo_qt_LDADD = $(LIBBITCOINQT) $(LIBBITCOIN_SERVER) |
|||
if ENABLE_WALLET |
|||
qt_test_test_komodo_qt_LDADD += $(LIBBITCOIN_WALLET) |
|||
endif |
|||
qt_test_test_komodo_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CRYPTO) $(LIBBITCOIN_UNIVALUE) $(LIBLEVELDB) \
|
|||
$(LIBMEMENV) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \
|
|||
$(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) $(LIBZCASH_LIBS) |
|||
qt_test_test_komodo_qt_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) |
|||
|
|||
CLEAN_BITCOIN_QT_TEST = $(TEST_QT_MOC_CPP) qt/test/*.gcda qt/test/*.gcno |
|||
|
|||
CLEANFILES += $(CLEAN_BITCOIN_QT_TEST) |
|||
|
|||
test_komodo_qt : qt/test/test_bitcoin-qt$(EXEEXT) |
|||
|
|||
test_komodo_qt_check : qt/test/test_bitcoin-qt$(EXEEXT) FORCE |
|||
$(MAKE) check-TESTS TESTS=$^ |
|||
|
|||
test_komodo_qt_clean: FORCE |
|||
rm -f $(CLEAN_BITCOIN_QT_TEST) $(qt_test_test_komodo_qt_OBJECTS) |
@ -1,9 +0,0 @@ |
|||
.PHONY: FORCE |
|||
all: FORCE |
|||
$(MAKE) -C .. komodo_qt test_komodo_qt |
|||
clean: FORCE |
|||
$(MAKE) -C .. komodo_qt_clean test_komodo_qt_clean |
|||
check: FORCE |
|||
$(MAKE) -C .. test_komodo_qt_check |
|||
komodo-qt komodo-qt.exe: FORCE |
|||
$(MAKE) -C .. komodo_qt |
@ -1,658 +0,0 @@ |
|||
// Copyright (c) 2011-2014 The Bitcoin Core developers
|
|||
// Distributed under the MIT software license, see the accompanying
|
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|||
|
|||
#if defined(HAVE_CONFIG_H) |
|||
#include "config/bitcoin-config.h" |
|||
#endif |
|||
|
|||
#include "bitcoingui.h" |
|||
|
|||
#include "clientmodel.h" |
|||
#include "guiconstants.h" |
|||
#include "guiutil.h" |
|||
#include "intro.h" |
|||
#include "networkstyle.h" |
|||
#include "optionsmodel.h" |
|||
#include "splashscreen.h" |
|||
#include "utilitydialog.h" |
|||
#include "winshutdownmonitor.h" |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
#include "paymentserver.h" |
|||
#include "walletmodel.h" |
|||
#endif |
|||
|
|||
#include "init.h" |
|||
#include "main.h" |
|||
#include "rpc/server.h" |
|||
#include "scheduler.h" |
|||
#include "ui_interface.h" |
|||
#include "util.h" |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
#include "wallet/wallet.h" |
|||
#endif |
|||
|
|||
#include <stdint.h> |
|||
|
|||
#include <boost/filesystem/operations.hpp> |
|||
#include <boost/thread.hpp> |
|||
|
|||
#include <QApplication> |
|||
#include <QDebug> |
|||
#include <QLibraryInfo> |
|||
#include <QLocale> |
|||
#include <QMessageBox> |
|||
#include <QSettings> |
|||
#include <QThread> |
|||
#include <QTimer> |
|||
#include <QTranslator> |
|||
#include <QSslConfiguration> |
|||
|
|||
#if defined(QT_STATICPLUGIN) |
|||
#include <QtPlugin> |
|||
#if QT_VERSION < 0x050000 |
|||
Q_IMPORT_PLUGIN(qcncodecs) |
|||
Q_IMPORT_PLUGIN(qjpcodecs) |
|||
Q_IMPORT_PLUGIN(qtwcodecs) |
|||
Q_IMPORT_PLUGIN(qkrcodecs) |
|||
Q_IMPORT_PLUGIN(qtaccessiblewidgets) |
|||
#else |
|||
#if QT_VERSION < 0x050400 |
|||
Q_IMPORT_PLUGIN(AccessibleFactory) |
|||
#endif |
|||
#if defined(QT_QPA_PLATFORM_XCB) |
|||
Q_IMPORT_PLUGIN(QXcbIntegrationPlugin); |
|||
#elif defined(QT_QPA_PLATFORM_WINDOWS) |
|||
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); |
|||
#elif defined(QT_QPA_PLATFORM_COCOA) |
|||
Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin); |
|||
#endif |
|||
#endif |
|||
#endif |
|||
|
|||
#if QT_VERSION < 0x050000 |
|||
#include <QTextCodec> |
|||
#endif |
|||
|
|||
// Declare meta types used for QMetaObject::invokeMethod
|
|||
Q_DECLARE_METATYPE(bool*) |
|||
Q_DECLARE_METATYPE(CAmount) |
|||
|
|||
static void InitMessage(const std::string &message) |
|||
{ |
|||
LogPrintf("init message: %s\n", message); |
|||
} |
|||
|
|||
/*
|
|||
Translate string to current locale using Qt. |
|||
*/ |
|||
static std::string Translate(const char* psz) |
|||
{ |
|||
return QCoreApplication::translate("bitcoin-core", psz).toStdString(); |
|||
} |
|||
|
|||
static QString GetLangTerritory() |
|||
{ |
|||
QSettings settings; |
|||
// Get desired locale (e.g. "de_DE")
|
|||
// 1) System default language
|
|||
QString lang_territory = QLocale::system().name(); |
|||
// 2) Language from QSettings
|
|||
QString lang_territory_qsettings = settings.value("language", "").toString(); |
|||
if(!lang_territory_qsettings.isEmpty()) |
|||
lang_territory = lang_territory_qsettings; |
|||
// 3) -lang command line argument
|
|||
lang_territory = QString::fromStdString(GetArg("-lang", lang_territory.toStdString())); |
|||
return lang_territory; |
|||
} |
|||
|
|||
/** Set up translations */ |
|||
static void initTranslations(QTranslator &qtTranslatorBase, QTranslator &qtTranslator, QTranslator &translatorBase, QTranslator &translator) |
|||
{ |
|||
// Remove old translators
|
|||
QApplication::removeTranslator(&qtTranslatorBase); |
|||
QApplication::removeTranslator(&qtTranslator); |
|||
QApplication::removeTranslator(&translatorBase); |
|||
QApplication::removeTranslator(&translator); |
|||
|
|||
// Get desired locale (e.g. "de_DE")
|
|||
// 1) System default language
|
|||
QString lang_territory = GetLangTerritory(); |
|||
|
|||
// Convert to "de" only by truncating "_DE"
|
|||
QString lang = lang_territory; |
|||
lang.truncate(lang_territory.lastIndexOf('_')); |
|||
|
|||
// Load language files for configured locale:
|
|||
// - First load the translator for the base language, without territory
|
|||
// - Then load the more specific locale translator
|
|||
|
|||
// Load e.g. qt_de.qm
|
|||
if (qtTranslatorBase.load("qt_" + lang, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) |
|||
QApplication::installTranslator(&qtTranslatorBase); |
|||
|
|||
// Load e.g. qt_de_DE.qm
|
|||
if (qtTranslator.load("qt_" + lang_territory, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) |
|||
QApplication::installTranslator(&qtTranslator); |
|||
|
|||
// Load e.g. bitcoin_de.qm (shortcut "de" needs to be defined in bitcoin.qrc)
|
|||
if (translatorBase.load(lang, ":/translations/")) |
|||
QApplication::installTranslator(&translatorBase); |
|||
|
|||
// Load e.g. bitcoin_de_DE.qm (shortcut "de_DE" needs to be defined in bitcoin.qrc)
|
|||
if (translator.load(lang_territory, ":/translations/")) |
|||
QApplication::installTranslator(&translator); |
|||
} |
|||
|
|||
/* qDebug() message handler --> debug.log */ |
|||
#if QT_VERSION < 0x050000 |
|||
void DebugMessageHandler(QtMsgType type, const char *msg) |
|||
{ |
|||
const char *category = (type == QtDebugMsg) ? "qt" : NULL; |
|||
LogPrint(category, "GUI: %s\n", msg); |
|||
} |
|||
#else |
|||
void DebugMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString &msg) |
|||
{ |
|||
Q_UNUSED(context); |
|||
const char *category = (type == QtDebugMsg) ? "qt" : NULL; |
|||
LogPrint(category, "GUI: %s\n", msg.toStdString()); |
|||
} |
|||
#endif |
|||
|
|||
/** Class encapsulating Bitcoin Core startup and shutdown.
|
|||
* Allows running startup and shutdown in a different thread from the UI thread. |
|||
*/ |
|||
class BitcoinCore: public QObject |
|||
{ |
|||
Q_OBJECT |
|||
public: |
|||
explicit BitcoinCore(); |
|||
|
|||
public Q_SLOTS: |
|||
void initialize(); |
|||
void shutdown(); |
|||
|
|||
Q_SIGNALS: |
|||
void initializeResult(int retval); |
|||
void shutdownResult(int retval); |
|||
void runawayException(const QString &message); |
|||
|
|||
private: |
|||
boost::thread_group threadGroup; |
|||
CScheduler scheduler; |
|||
|
|||
/// Pass fatal exception message to UI thread
|
|||
void handleRunawayException(const std::exception *e); |
|||
}; |
|||
|
|||
/** Main Bitcoin application object */ |
|||
class BitcoinApplication: public QApplication |
|||
{ |
|||
Q_OBJECT |
|||
public: |
|||
explicit BitcoinApplication(int &argc, char **argv); |
|||
~BitcoinApplication(); |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
/// Create payment server
|
|||
void createPaymentServer(); |
|||
#endif |
|||
/// Create options model
|
|||
void createOptionsModel(); |
|||
/// Create main window
|
|||
void createWindow(const NetworkStyle *networkStyle); |
|||
/// Create splash screen
|
|||
void createSplashScreen(const NetworkStyle *networkStyle); |
|||
|
|||
/// Request core initialization
|
|||
void requestInitialize(); |
|||
/// Request core shutdown
|
|||
void requestShutdown(); |
|||
|
|||
/// Get process return value
|
|||
int getReturnValue() { return returnValue; } |
|||
|
|||
/// Get window identifier of QMainWindow (BitcoinGUI)
|
|||
WId getMainWinId() const; |
|||
|
|||
public Q_SLOTS: |
|||
void initializeResult(int retval); |
|||
void shutdownResult(int retval); |
|||
/// Handle runaway exceptions. Shows a message box with the problem and quits the program.
|
|||
void handleRunawayException(const QString &message); |
|||
|
|||
Q_SIGNALS: |
|||
void requestedInitialize(); |
|||
void requestedShutdown(); |
|||
void stopThread(); |
|||
void splashFinished(QWidget *window); |
|||
|
|||
private: |
|||
QThread *coreThread; |
|||
OptionsModel *optionsModel; |
|||
ClientModel *clientModel; |
|||
BitcoinGUI *window; |
|||
QTimer *pollShutdownTimer; |
|||
#ifdef ENABLE_WALLET |
|||
PaymentServer* paymentServer; |
|||
WalletModel *walletModel; |
|||
#endif |
|||
int returnValue; |
|||
|
|||
void startThread(); |
|||
}; |
|||
|
|||
#include "bitcoin.moc" |
|||
|
|||
BitcoinCore::BitcoinCore(): |
|||
QObject() |
|||
{ |
|||
} |
|||
|
|||
void BitcoinCore::handleRunawayException(const std::exception *e) |
|||
{ |
|||
PrintExceptionContinue(e, "Runaway exception"); |
|||
Q_EMIT runawayException(QString::fromStdString(strMiscWarning)); |
|||
} |
|||
|
|||
void BitcoinCore::initialize() |
|||
{ |
|||
try |
|||
{ |
|||
qDebug() << __func__ << ": Running AppInit2 in thread"; |
|||
int rv = AppInit2(threadGroup, scheduler); |
|||
if(rv) |
|||
{ |
|||
/* Start a dummy RPC thread if no RPC thread is active yet
|
|||
* to handle timeouts. |
|||
*/ |
|||
StartDummyRPCThread(); |
|||
} |
|||
Q_EMIT initializeResult(rv); |
|||
} catch (const std::exception& e) { |
|||
handleRunawayException(&e); |
|||
} catch (...) { |
|||
handleRunawayException(NULL); |
|||
} |
|||
} |
|||
|
|||
void BitcoinCore::shutdown() |
|||
{ |
|||
try |
|||
{ |
|||
qDebug() << __func__ << ": Running Shutdown in thread"; |
|||
threadGroup.interrupt_all(); |
|||
threadGroup.join_all(); |
|||
Shutdown(); |
|||
qDebug() << __func__ << ": Shutdown finished"; |
|||
Q_EMIT shutdownResult(1); |
|||
} catch (const std::exception& e) { |
|||
handleRunawayException(&e); |
|||
} catch (...) { |
|||
handleRunawayException(NULL); |
|||
} |
|||
} |
|||
|
|||
BitcoinApplication::BitcoinApplication(int &argc, char **argv): |
|||
QApplication(argc, argv), |
|||
coreThread(0), |
|||
optionsModel(0), |
|||
clientModel(0), |
|||
window(0), |
|||
pollShutdownTimer(0), |
|||
#ifdef ENABLE_WALLET |
|||
paymentServer(0), |
|||
walletModel(0), |
|||
#endif |
|||
returnValue(0) |
|||
{ |
|||
setQuitOnLastWindowClosed(false); |
|||
} |
|||
|
|||
BitcoinApplication::~BitcoinApplication() |
|||
{ |
|||
if(coreThread) |
|||
{ |
|||
qDebug() << __func__ << ": Stopping thread"; |
|||
Q_EMIT stopThread(); |
|||
coreThread->wait(); |
|||
qDebug() << __func__ << ": Stopped thread"; |
|||
} |
|||
|
|||
delete window; |
|||
window = 0; |
|||
#ifdef ENABLE_WALLET |
|||
delete paymentServer; |
|||
paymentServer = 0; |
|||
#endif |
|||
delete optionsModel; |
|||
optionsModel = 0; |
|||
} |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
void BitcoinApplication::createPaymentServer() |
|||
{ |
|||
paymentServer = new PaymentServer(this); |
|||
} |
|||
#endif |
|||
|
|||
void BitcoinApplication::createOptionsModel() |
|||
{ |
|||
optionsModel = new OptionsModel(); |
|||
} |
|||
|
|||
void BitcoinApplication::createWindow(const NetworkStyle *networkStyle) |
|||
{ |
|||
window = new BitcoinGUI(networkStyle, 0); |
|||
|
|||
pollShutdownTimer = new QTimer(window); |
|||
connect(pollShutdownTimer, SIGNAL(timeout()), window, SLOT(detectShutdown())); |
|||
pollShutdownTimer->start(200); |
|||
} |
|||
|
|||
void BitcoinApplication::createSplashScreen(const NetworkStyle *networkStyle) |
|||
{ |
|||
SplashScreen *splash = new SplashScreen(0, networkStyle); |
|||
// We don't hold a direct pointer to the splash screen after creation, so use
|
|||
// Qt::WA_DeleteOnClose to make sure that the window will be deleted eventually.
|
|||
splash->setAttribute(Qt::WA_DeleteOnClose); |
|||
splash->show(); |
|||
connect(this, SIGNAL(splashFinished(QWidget*)), splash, SLOT(slotFinish(QWidget*))); |
|||
} |
|||
|
|||
void BitcoinApplication::startThread() |
|||
{ |
|||
if(coreThread) |
|||
return; |
|||
coreThread = new QThread(this); |
|||
BitcoinCore *executor = new BitcoinCore(); |
|||
executor->moveToThread(coreThread); |
|||
|
|||
/* communication to and from thread */ |
|||
connect(executor, SIGNAL(initializeResult(int)), this, SLOT(initializeResult(int))); |
|||
connect(executor, SIGNAL(shutdownResult(int)), this, SLOT(shutdownResult(int))); |
|||
connect(executor, SIGNAL(runawayException(QString)), this, SLOT(handleRunawayException(QString))); |
|||
connect(this, SIGNAL(requestedInitialize()), executor, SLOT(initialize())); |
|||
connect(this, SIGNAL(requestedShutdown()), executor, SLOT(shutdown())); |
|||
/* make sure executor object is deleted in its own thread */ |
|||
connect(this, SIGNAL(stopThread()), executor, SLOT(deleteLater())); |
|||
connect(this, SIGNAL(stopThread()), coreThread, SLOT(quit())); |
|||
|
|||
coreThread->start(); |
|||
} |
|||
|
|||
void BitcoinApplication::requestInitialize() |
|||
{ |
|||
qDebug() << __func__ << ": Requesting initialize"; |
|||
startThread(); |
|||
Q_EMIT requestedInitialize(); |
|||
} |
|||
|
|||
void BitcoinApplication::requestShutdown() |
|||
{ |
|||
qDebug() << __func__ << ": Requesting shutdown"; |
|||
startThread(); |
|||
window->hide(); |
|||
window->setClientModel(0); |
|||
pollShutdownTimer->stop(); |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
window->removeAllWallets(); |
|||
delete walletModel; |
|||
walletModel = 0; |
|||
#endif |
|||
delete clientModel; |
|||
clientModel = 0; |
|||
|
|||
// Show a simple window indicating shutdown status
|
|||
ShutdownWindow::showShutdownWindow(window); |
|||
|
|||
// Request shutdown from core thread
|
|||
Q_EMIT requestedShutdown(); |
|||
} |
|||
|
|||
void BitcoinApplication::initializeResult(int retval) |
|||
{ |
|||
qDebug() << __func__ << ": Initialization result: " << retval; |
|||
// Set exit result: 0 if successful, 1 if failure
|
|||
returnValue = retval ? 0 : 1; |
|||
if(retval) |
|||
{ |
|||
#ifdef ENABLE_WALLET |
|||
PaymentServer::LoadRootCAs(); |
|||
paymentServer->setOptionsModel(optionsModel); |
|||
#endif |
|||
|
|||
clientModel = new ClientModel(optionsModel); |
|||
window->setClientModel(clientModel); |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
if(pwalletMain) |
|||
{ |
|||
walletModel = new WalletModel(pwalletMain, optionsModel); |
|||
|
|||
window->addWallet(BitcoinGUI::DEFAULT_WALLET, walletModel); |
|||
window->setCurrentWallet(BitcoinGUI::DEFAULT_WALLET); |
|||
|
|||
connect(walletModel, SIGNAL(coinsSent(CWallet*,SendCoinsRecipient,QByteArray)), |
|||
paymentServer, SLOT(fetchPaymentACK(CWallet*,const SendCoinsRecipient&,QByteArray))); |
|||
} |
|||
#endif |
|||
|
|||
// If -min option passed, start window minimized.
|
|||
if(GetBoolArg("-min", false)) |
|||
{ |
|||
window->showMinimized(); |
|||
} |
|||
else |
|||
{ |
|||
window->show(); |
|||
} |
|||
Q_EMIT splashFinished(window); |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
// Now that initialization/startup is done, process any command-line
|
|||
// bitcoin: URIs or payment requests:
|
|||
connect(paymentServer, SIGNAL(receivedPaymentRequest(SendCoinsRecipient)), |
|||
window, SLOT(handlePaymentRequest(SendCoinsRecipient))); |
|||
connect(window, SIGNAL(receivedURI(QString)), |
|||
paymentServer, SLOT(handleURIOrFile(QString))); |
|||
connect(paymentServer, SIGNAL(message(QString,QString,unsigned int)), |
|||
window, SLOT(message(QString,QString,unsigned int))); |
|||
QTimer::singleShot(100, paymentServer, SLOT(uiReady())); |
|||
#endif |
|||
} else { |
|||
quit(); // Exit main loop
|
|||
} |
|||
} |
|||
|
|||
void BitcoinApplication::shutdownResult(int retval) |
|||
{ |
|||
qDebug() << __func__ << ": Shutdown result: " << retval; |
|||
quit(); // Exit main loop after shutdown finished
|
|||
} |
|||
|
|||
void BitcoinApplication::handleRunawayException(const QString &message) |
|||
{ |
|||
QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occurred. Bitcoin can no longer continue safely and will quit.") + QString("\n\n") + message); |
|||
::exit(1); |
|||
} |
|||
|
|||
WId BitcoinApplication::getMainWinId() const |
|||
{ |
|||
if (!window) |
|||
return 0; |
|||
|
|||
return window->winId(); |
|||
} |
|||
|
|||
#ifndef BITCOIN_QT_TEST |
|||
int main(int argc, char *argv[]) |
|||
{ |
|||
SetupEnvironment(); |
|||
|
|||
/// 1. Parse command-line options. These take precedence over anything else.
|
|||
// Command-line options take precedence:
|
|||
ParseParameters(argc, argv); |
|||
|
|||
// Do not refer to data directory yet, this can be overridden by Intro::pickDataDirectory
|
|||
|
|||
/// 2. Basic Qt initialization (not dependent on parameters or configuration)
|
|||
#if QT_VERSION < 0x050000 |
|||
// Internal string conversion is all UTF-8
|
|||
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); |
|||
QTextCodec::setCodecForCStrings(QTextCodec::codecForTr()); |
|||
#endif |
|||
|
|||
Q_INIT_RESOURCE(bitcoin); |
|||
Q_INIT_RESOURCE(bitcoin_locale); |
|||
|
|||
BitcoinApplication app(argc, argv); |
|||
#if QT_VERSION > 0x050100 |
|||
// Generate high-dpi pixmaps
|
|||
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); |
|||
#endif |
|||
#ifdef Q_OS_MAC |
|||
QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); |
|||
#endif |
|||
#if QT_VERSION >= 0x050500 |
|||
// Because of the POODLE attack it is recommended to disable SSLv3 (https://disablessl3.com/),
|
|||
// so set SSL protocols to TLS1.0+.
|
|||
QSslConfiguration sslconf = QSslConfiguration::defaultConfiguration(); |
|||
sslconf.setProtocol(QSsl::TlsV1_0OrLater); |
|||
QSslConfiguration::setDefaultConfiguration(sslconf); |
|||
#endif |
|||
|
|||
// Register meta types used for QMetaObject::invokeMethod
|
|||
qRegisterMetaType< bool* >(); |
|||
// Need to pass name here as CAmount is a typedef (see http://qt-project.org/doc/qt-5/qmetatype.html#qRegisterMetaType)
|
|||
// IMPORTANT if it is no longer a typedef use the normal variant above
|
|||
qRegisterMetaType< CAmount >("CAmount"); |
|||
|
|||
/// 3. Application identification
|
|||
// must be set before OptionsModel is initialized or translations are loaded,
|
|||
// as it is used to locate QSettings
|
|||
QApplication::setOrganizationName(QAPP_ORG_NAME); |
|||
QApplication::setOrganizationDomain(QAPP_ORG_DOMAIN); |
|||
QApplication::setApplicationName(QAPP_APP_NAME_DEFAULT); |
|||
GUIUtil::SubstituteFonts(GetLangTerritory()); |
|||
|
|||
/// 4. Initialization of translations, so that intro dialog is in user's language
|
|||
// Now that QSettings are accessible, initialize translations
|
|||
QTranslator qtTranslatorBase, qtTranslator, translatorBase, translator; |
|||
initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator); |
|||
translationInterface.Translate.connect(Translate); |
|||
|
|||
// Show help message immediately after parsing command-line options (for "-lang") and setting locale,
|
|||
// but before showing splash screen.
|
|||
if (mapArgs.count("-?") || mapArgs.count("-h") || mapArgs.count("-help") || mapArgs.count("-version")) |
|||
{ |
|||
HelpMessageDialog help(NULL, mapArgs.count("-version")); |
|||
help.showOrPrint(); |
|||
return 1; |
|||
} |
|||
|
|||
/// 5. Now that settings and translations are available, ask user for data directory
|
|||
// User language is set up: pick a data directory
|
|||
Intro::pickDataDirectory(); |
|||
|
|||
/// 6. Determine availability of data directory and parse komodo.conf
|
|||
/// - Do not call GetDataDir(true) before this step finishes
|
|||
if (!boost::filesystem::is_directory(GetDataDir(false))) |
|||
{ |
|||
QMessageBox::critical(0, QObject::tr("Bitcoin Core"), |
|||
QObject::tr("Error: Specified data directory \"%1\" does not exist.").arg(QString::fromStdString(mapArgs["-datadir"]))); |
|||
return 1; |
|||
} |
|||
try { |
|||
ReadConfigFile(mapArgs, mapMultiArgs); |
|||
} catch (const std::exception& e) { |
|||
QMessageBox::critical(0, QObject::tr("Bitcoin Core"), |
|||
QObject::tr("Error: Cannot parse configuration file: %1. Only use key=value syntax.").arg(e.what())); |
|||
return false; |
|||
} |
|||
|
|||
/// 7. Determine network (and switch to network specific options)
|
|||
// - Do not call Params() before this step
|
|||
// - Do this after parsing the configuration file, as the network can be switched there
|
|||
// - QSettings() will use the new application name after this, resulting in network-specific settings
|
|||
// - Needs to be done before createOptionsModel
|
|||
|
|||
// Check for -testnet or -regtest parameter (Params() calls are only valid after this clause)
|
|||
if (!SelectParamsFromCommandLine()) { |
|||
QMessageBox::critical(0, QObject::tr("Bitcoin Core"), QObject::tr("Error: Invalid combination of -regtest and -testnet.")); |
|||
return 1; |
|||
} |
|||
#ifdef ENABLE_WALLET |
|||
// Parse URIs on command line -- this can affect Params()
|
|||
PaymentServer::ipcParseCommandLine(argc, argv); |
|||
#endif |
|||
|
|||
QScopedPointer<const NetworkStyle> networkStyle(NetworkStyle::instantiate(QString::fromStdString(Params().NetworkIDString()))); |
|||
assert(!networkStyle.isNull()); |
|||
// Allow for separate UI settings for testnets
|
|||
QApplication::setApplicationName(networkStyle->getAppName()); |
|||
// Re-initialize translations after changing application name (language in network-specific settings can be different)
|
|||
initTranslations(qtTranslatorBase, qtTranslator, translatorBase, translator); |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
/// 8. URI IPC sending
|
|||
// - Do this early as we don't want to bother initializing if we are just calling IPC
|
|||
// - Do this *after* setting up the data directory, as the data directory hash is used in the name
|
|||
// of the server.
|
|||
// - Do this after creating app and setting up translations, so errors are
|
|||
// translated properly.
|
|||
if (PaymentServer::ipcSendCommandLine()) |
|||
exit(0); |
|||
|
|||
// Start up the payment server early, too, so impatient users that click on
|
|||
// bitcoin: links repeatedly have their payment requests routed to this process:
|
|||
app.createPaymentServer(); |
|||
#endif |
|||
|
|||
/// 9. Main GUI initialization
|
|||
// Install global event filter that makes sure that long tooltips can be word-wrapped
|
|||
app.installEventFilter(new GUIUtil::ToolTipToRichTextFilter(TOOLTIP_WRAP_THRESHOLD, &app)); |
|||
#if QT_VERSION < 0x050000 |
|||
// Install qDebug() message handler to route to debug.log
|
|||
qInstallMsgHandler(DebugMessageHandler); |
|||
#else |
|||
#if defined(Q_OS_WIN) |
|||
// Install global event filter for processing Windows session related Windows messages (WM_QUERYENDSESSION and WM_ENDSESSION)
|
|||
qApp->installNativeEventFilter(new WinShutdownMonitor()); |
|||
#endif |
|||
// Install qDebug() message handler to route to debug.log
|
|||
qInstallMessageHandler(DebugMessageHandler); |
|||
#endif |
|||
// Load GUI settings from QSettings
|
|||
app.createOptionsModel(); |
|||
|
|||
// Subscribe to global signals from core
|
|||
uiInterface.InitMessage.connect(InitMessage); |
|||
|
|||
if (GetBoolArg("-splash", true) && !GetBoolArg("-min", false)) |
|||
app.createSplashScreen(networkStyle.data()); |
|||
|
|||
try |
|||
{ |
|||
app.createWindow(networkStyle.data()); |
|||
app.requestInitialize(); |
|||
#if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 |
|||
WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("Bitcoin Core didn't yet exit safely..."), (HWND)app.getMainWinId()); |
|||
#endif |
|||
app.exec(); |
|||
app.requestShutdown(); |
|||
app.exec(); |
|||
} catch (const std::exception& e) { |
|||
PrintExceptionContinue(&e, "Runaway exception"); |
|||
app.handleRunawayException(QString::fromStdString(strMiscWarning)); |
|||
} catch (...) { |
|||
PrintExceptionContinue(NULL, "Runaway exception"); |
|||
app.handleRunawayException(QString::fromStdString(strMiscWarning)); |
|||
} |
|||
return app.getReturnValue(); |
|||
} |
|||
#endif // BITCOIN_QT_TEST
|
@ -1,319 +0,0 @@ |
|||
|
|||
|
|||
#include <QtGlobal> |
|||
|
|||
// Automatically generated by extract_strings.py
|
|||
#ifdef __GNUC__ |
|||
#define UNUSED __attribute__((unused)) |
|||
#else |
|||
#define UNUSED |
|||
#endif |
|||
static const char UNUSED *bitcoin_strings[] = { |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"(1 = keep tx meta data e.g. account owner and payment request information, 2 " |
|||
"= drop tx meta data)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Allow JSON-RPC connections from specified source. Valid for <ip> are a " |
|||
"single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or " |
|||
"a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"An error occurred while setting up the RPC address %s port %u for listening: " |
|||
"%s"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Bind to given address and always listen on it. Use [host]:port notation for " |
|||
"IPv6"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Bind to given address and whitelist peers connecting to it. Use [host]:port " |
|||
"notation for IPv6"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Bind to given address to listen for JSON-RPC connections. Use [host]:port " |
|||
"notation for IPv6. This option can be specified multiple times (default: " |
|||
"bind to all interfaces)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Cannot obtain a lock on data directory %s. Bitcoin Core is probably already " |
|||
"running."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Create new files with system default permissions, instead of umask 077 (only " |
|||
"effective with disabled wallet functionality)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Delete all wallet transactions and only recover those parts of the " |
|||
"blockchain through -rescan on startup"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Discover own IP addresses (default: 1 when listening and no -externalip or -" |
|||
"proxy)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Distributed under the MIT software license, see the accompanying file " |
|||
"COPYING or <http://www.opensource.org/licenses/mit-license.php>."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Error: Listening for incoming connections failed (listen returned error %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Error: Unsupported argument -socks found. Setting SOCKS version isn't " |
|||
"possible anymore, only SOCKS5 proxies are supported."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Execute command when a relevant alert is received or we see a really long " |
|||
"fork (%s in cmd is replaced by message)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Execute command when a wallet transaction changes (%s in cmd is replaced by " |
|||
"TxID)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Execute command when the best block changes (%s in cmd is replaced by block " |
|||
"hash)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Fees (in BTC/Kb) smaller than this are considered zero fee for relaying " |
|||
"(default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"How thorough the block verification of -checkblocks is (0-4, default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"If paytxfee is not set, include enough fee so transactions begin " |
|||
"confirmation on average within n blocks (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Invalid amount for -maxtxfee=<amount>: '%s' (must be at least the minrelay " |
|||
"fee of %s to prevent stuck transactions)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Maintain a full transaction index, used by the getrawtransaction rpc call " |
|||
"(default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Maximum size of data in data carrier transactions we relay and mine " |
|||
"(default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Maximum total fees to use in a single wallet transaction; setting this too " |
|||
"low may abort large transactions (default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Number of seconds to keep misbehaving peers from reconnecting (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Output debugging information (default: %u, supplying <category> is optional)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Prune configured below the minimum of %d MB. Please use a higher number."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Query for peer addresses via DNS lookup, if low on addresses (default: 1 " |
|||
"unless -connect)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Randomize credentials for every proxy connection. This enables Tor stream " |
|||
"isolation (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Reduce storage requirements by pruning (deleting) old blocks. This mode " |
|||
"disables wallet support and is incompatible with -txindex. Warning: " |
|||
"Reverting this setting requires re-downloading the entire blockchain. " |
|||
"(default: 0 = disable pruning blocks, >%u = target size in MiB to use for " |
|||
"block files)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Set the number of script verification threads (%u to %d, 0 = auto, <0 = " |
|||
"leave that many cores free, default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Set the number of threads for coin generation if enabled (-1 = all cores, " |
|||
"default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"The transaction amount is too small to send after the fee has been deducted"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"This is a pre-release test build - use at your own risk - do not use for " |
|||
"mining or merchant applications"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"This product includes software developed by the OpenSSL Project for use in " |
|||
"the OpenSSL Toolkit <https://www.openssl.org/> and cryptographic software " |
|||
"written by Eric Young and UPnP software written by Thomas Bernard."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"To use bitcoind, or the -server option to komodo-qt, you must set an " |
|||
"rpcpassword in the configuration file:\n" |
|||
"%s\n" |
|||
"It is recommended you use the following random password:\n" |
|||
"rpcuser=bitcoinrpc\n" |
|||
"rpcpassword=%s\n" |
|||
"(you do not need to remember this password)\n" |
|||
"The username and password MUST NOT be the same.\n" |
|||
"If the file does not exist, create it with owner-readable-only file " |
|||
"permissions.\n" |
|||
"It is also recommended to set alertnotify so you are notified of problems;\n" |
|||
"for example: alertnotify=echo %%s | mail -s \"Bitcoin Alert\" admin@foo.com\n"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Unable to bind to %s on this computer. Bitcoin Core is probably already " |
|||
"running."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: " |
|||
"%s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"WARNING: abnormally high number of blocks generated, %d blocks received in " |
|||
"the last %d hours (%d expected)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"WARNING: check your network connection, %d blocks received in the last %d " |
|||
"hours (%d expected)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Warning: -maxtxfee is set very high! Fees this large could be paid on a " |
|||
"single transaction."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Warning: -paytxfee is set very high! This is the transaction fee you will " |
|||
"pay if you send a transaction."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Warning: Please check that your computer's date and time are correct! If " |
|||
"your clock is wrong Bitcoin Core will not work properly."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Warning: The network does not appear to fully agree! Some miners appear to " |
|||
"be experiencing issues."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Warning: We do not appear to fully agree with our peers! You may need to " |
|||
"upgrade, or other nodes may need to upgrade."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Warning: error reading wallet.dat! All keys read correctly, but transaction " |
|||
"data or address book entries might be missing or incorrect."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Warning: wallet.dat corrupt, data salvaged! Original wallet.dat saved as " |
|||
"wallet.{timestamp}.bak in %s; if your balance or transactions are incorrect " |
|||
"you should restore from a backup."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Whitelist peers connecting from the given netmask or IP address. Can be " |
|||
"specified multiple times."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"Whitelisted peers cannot be DoS banned and their transactions are always " |
|||
"relayed, even if they are already in the mempool, useful e.g. for a gateway"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "" |
|||
"You need to rebuild the database using -reindex to go back to unpruned " |
|||
"mode. This will redownload the entire blockchain"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "(default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "(default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "(default: 1)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "<category> can be:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Accept command line and JSON-RPC commands"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Accept public REST requests (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Acceptable ciphers (default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Activating best chain..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Add a node to connect to and attempt to keep the connection open"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Allow DNS lookups for -addnode, -seednode and -connect"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Always query for peer addresses via DNS lookup (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Attempt to recover private keys from a corrupt wallet.dat"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Block creation options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Can't run with a wallet in prune mode."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot downgrade wallet"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -bind address: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -externalip address: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot resolve -whitebind address: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Cannot write default address"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Choose data directory on startup (default: 0)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Connect only to the specified node(s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Connect through SOCKS5 proxy"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Connect to a node to retrieve peer addresses, and disconnect"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Connection options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Copyright (C) 2009-%i The Bitcoin Core Developers"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Corrupted block database detected"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Could not parse -rpcbind value %s as network address"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Debugging/Testing options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Do not load the wallet and disable wallet RPC calls"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "error with HDD data, maybe just need to update to latest version"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Done loading"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing block database"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error initializing wallet database environment %s!"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading block database"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet corrupted"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error loading wallet.dat: Wallet requires newer version of Bitcoin Core"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error opening block database"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error reading from database, shutting down."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error: A fatal internal error occurred, see debug.log for details"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error: Disk space is low!"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Error: Unsupported argument -tor found, use -onion."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Failed to listen on any port. Use -listen=0 if you want this."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Fee (in BTC/kB) to add to transactions you send (default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Generate coins (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "How many blocks to check at startup (default: %u, 0 = all)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "If <category> is not supplied, output all debugging information."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Importing..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Imports blocks from external blk000??.dat file"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Include IP addresses in debug output (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Incorrect or no genesis block found. Wrong datadir for network?"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Information"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Initialization sanity check failed. Bitcoin Core is shutting down."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Insufficient funds"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -onion address: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid -proxy address: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -maxtxfee=<amount>: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -minrelaytxfee=<amount>: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -mintxfee=<amount>: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -paytxfee=<amount>: '%s' (must be at least %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid amount for -paytxfee=<amount>: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Invalid netmask specified in -whitelist: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Keep at most <n> unconnectable transactions in memory (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Listen for JSON-RPC connections on <port> (default: %u or testnet: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Listen for connections on <port> (default: %u or testnet: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Loading addresses..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Loading block index..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Loading wallet..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Maintain at most <n> connections to peers (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Make the wallet broadcast transactions"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection receive buffer, <n>*1000 bytes (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Maximum per-connection send buffer, <n>*1000 bytes (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Need to specify a port with -whitebind: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Node relay options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Not enough file descriptors available."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Only connect to nodes in network <net> (ipv4, ipv6 or onion)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Password for JSON-RPC connections"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Prepend debug output with timestamp (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Prune cannot be configured with a negative value."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Prune mode is incompatible with -txindex."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Pruning blockstore..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "RPC SSL options: (see the Bitcoin Wiki for SSL setup instructions)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "RPC server options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "RPC support for HTTP persistent connections (default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Rebuild block chain index from current blk000??.dat files on startup"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Receive and display P2P network alerts (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Relay and mine data carrier transactions (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Relay non-P2SH multisig (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Rescan the block chain for missing wallet transactions"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Rescanning..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Run in the background as a daemon and accept commands"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Send trace/debug info to console instead of debug.log file"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Send transactions as zero-fee transactions if possible (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Server certificate file (default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Server private key (default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Set SSL root certificates for payment request (default: -system-)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Set database cache size in megabytes (%d to %d, default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Set key pool size to <n> (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Set language, for example \"de_DE\" (default: system locale)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Set maximum block size in bytes (default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Set minimum block size in bytes (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Set the number of threads to service RPC calls (default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Show all debugging options (usage: --help -help-debug)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Show splash screen on startup (default: 1)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Shrink debug.log file on client startup (default: 1 when no -debug)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Signing transaction failed"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Specify configuration file (default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Specify connection timeout in milliseconds (minimum: 1, default: %d)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Specify data directory"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Specify pid file (default: %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Specify wallet file (within data directory)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Specify your own public address"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Spend unconfirmed change when sending transactions (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Start minimized"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "The transaction amount is too small to pay the fee"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "This help message"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "This is experimental software."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Threshold for disconnecting misbehaving peers (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction amount too small"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction amounts must be positive"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction too large for fee policy"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Transaction too large"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "UI Options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Unable to bind to %s on this computer (bind returned error %s)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Unknown network specified in -onlynet: '%s'"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Upgrade wallet to latest format"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Use OpenSSL (https) for JSON-RPC connections"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: %u)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Use UPnP to map the listening port (default: 1 when listening)"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Use the test network"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Username for JSON-RPC connections"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Verifying blocks..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Verifying wallet..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet %s resides outside data directory %s"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet needed to be rewritten: restart Bitcoin Core to complete"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Wallet options:"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Warning"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Warning: This version is obsolete; upgrade required!"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Unsupported argument -benchmark ignored, use -debug=bench."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Warning: Unsupported argument -debugnet ignored, use -debug=net."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "You need to rebuild the database using -reindex to change -txindex"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "Zapping all transactions from wallet..."), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "on startup"), |
|||
QT_TRANSLATE_NOOP("bitcoin-core", "wallet.dat corrupt, salvage failed"), |
|||
}; |
@ -1,52 +0,0 @@ |
|||
// Copyright (c) 2011-2014 The Bitcoin Core developers
|
|||
// Distributed under the MIT software license, see the accompanying
|
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|||
|
|||
#ifndef BITCOIN_QT_GUICONSTANTS_H |
|||
#define BITCOIN_QT_GUICONSTANTS_H |
|||
|
|||
/* Milliseconds between model updates */ |
|||
static const int MODEL_UPDATE_DELAY = 250; |
|||
|
|||
/* AskPassphraseDialog -- Maximum passphrase length */ |
|||
static const int MAX_PASSPHRASE_SIZE = 1024; |
|||
|
|||
/* BitcoinGUI -- Size of icons in status bar */ |
|||
static const int STATUSBAR_ICONSIZE = 16; |
|||
|
|||
/* Invalid field background style */ |
|||
#define STYLE_INVALID "background:#FF8080" |
|||
|
|||
/* Transaction list -- unconfirmed transaction */ |
|||
#define COLOR_UNCONFIRMED QColor(128, 128, 128) |
|||
/* Transaction list -- negative amount */ |
|||
#define COLOR_NEGATIVE QColor(255, 0, 0) |
|||
/* Transaction list -- bare address (without label) */ |
|||
#define COLOR_BAREADDRESS QColor(140, 140, 140) |
|||
/* Transaction list -- TX status decoration - open until date */ |
|||
#define COLOR_TX_STATUS_OPENUNTILDATE QColor(64, 64, 255) |
|||
/* Transaction list -- TX status decoration - offline */ |
|||
#define COLOR_TX_STATUS_OFFLINE QColor(192, 192, 192) |
|||
/* Transaction list -- TX status decoration - default color */ |
|||
#define COLOR_BLACK QColor(0, 0, 0) |
|||
|
|||
/* Tooltips longer than this (in characters) are converted into rich text,
|
|||
so that they can be word-wrapped. |
|||
*/ |
|||
static const int TOOLTIP_WRAP_THRESHOLD = 80; |
|||
|
|||
/* Maximum allowed URI length */ |
|||
static const int MAX_URI_LENGTH = 255; |
|||
|
|||
/* QRCodeDialog -- size of exported QR Code image */ |
|||
#define EXPORT_IMAGE_SIZE 256 |
|||
|
|||
/* Number of frames in spinner animation */ |
|||
#define SPINNER_FRAMES 35 |
|||
|
|||
#define QAPP_ORG_NAME "Bitcoin" |
|||
#define QAPP_ORG_DOMAIN "bitcoin.org" |
|||
#define QAPP_APP_NAME_DEFAULT "Komodo-Qt" |
|||
#define QAPP_APP_NAME_TESTNET "Komodo-Qt-testnet" |
|||
|
|||
#endif // BITCOIN_QT_GUICONSTANTS_H
|
@ -1,293 +0,0 @@ |
|||
// Copyright (c) 2011-2014 The Bitcoin Core developers
|
|||
// Distributed under the MIT software license, see the accompanying
|
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|||
|
|||
#include "intro.h" |
|||
#include "ui_intro.h" |
|||
|
|||
#include "guiutil.h" |
|||
#include "scicon.h" |
|||
|
|||
#include "util.h" |
|||
|
|||
#include <boost/filesystem.hpp> |
|||
|
|||
#include <QFileDialog> |
|||
#include <QSettings> |
|||
#include <QMessageBox> |
|||
|
|||
/* Minimum free space (in bytes) needed for data directory */ |
|||
static const uint64_t GB_BYTES = 1000000000LL; |
|||
static const uint64_t BLOCK_CHAIN_SIZE = 20LL * GB_BYTES; |
|||
|
|||
/* Check free space asynchronously to prevent hanging the UI thread.
|
|||
|
|||
Up to one request to check a path is in flight to this thread; when the check() |
|||
function runs, the current path is requested from the associated Intro object. |
|||
The reply is sent back through a signal. |
|||
|
|||
This ensures that no queue of checking requests is built up while the user is |
|||
still entering the path, and that always the most recently entered path is checked as |
|||
soon as the thread becomes available. |
|||
*/ |
|||
class FreespaceChecker : public QObject |
|||
{ |
|||
Q_OBJECT |
|||
|
|||
public: |
|||
FreespaceChecker(Intro *intro); |
|||
|
|||
enum Status { |
|||
ST_OK, |
|||
ST_ERROR |
|||
}; |
|||
|
|||
public Q_SLOTS: |
|||
void check(); |
|||
|
|||
Q_SIGNALS: |
|||
void reply(int status, const QString &message, quint64 available); |
|||
|
|||
private: |
|||
Intro *intro; |
|||
}; |
|||
|
|||
#include "intro.moc" |
|||
|
|||
FreespaceChecker::FreespaceChecker(Intro *intro) |
|||
{ |
|||
this->intro = intro; |
|||
} |
|||
|
|||
void FreespaceChecker::check() |
|||
{ |
|||
namespace fs = boost::filesystem; |
|||
QString dataDirStr = intro->getPathToCheck(); |
|||
fs::path dataDir = GUIUtil::qstringToBoostPath(dataDirStr); |
|||
uint64_t freeBytesAvailable = 0; |
|||
int replyStatus = ST_OK; |
|||
QString replyMessage = tr("A new data directory will be created."); |
|||
|
|||
/* Find first parent that exists, so that fs::space does not fail */ |
|||
fs::path parentDir = dataDir; |
|||
fs::path parentDirOld = fs::path(); |
|||
while(parentDir.has_parent_path() && !fs::exists(parentDir)) |
|||
{ |
|||
parentDir = parentDir.parent_path(); |
|||
|
|||
/* Check if we make any progress, break if not to prevent an infinite loop here */ |
|||
if (parentDirOld == parentDir) |
|||
break; |
|||
|
|||
parentDirOld = parentDir; |
|||
} |
|||
|
|||
try { |
|||
freeBytesAvailable = fs::space(parentDir).available; |
|||
if(fs::exists(dataDir)) |
|||
{ |
|||
if(fs::is_directory(dataDir)) |
|||
{ |
|||
QString separator = "<code>" + QDir::toNativeSeparators("/") + tr("name") + "</code>"; |
|||
replyStatus = ST_OK; |
|||
replyMessage = tr("Directory already exists. Add %1 if you intend to create a new directory here.").arg(separator); |
|||
} else { |
|||
replyStatus = ST_ERROR; |
|||
replyMessage = tr("Path already exists, and is not a directory."); |
|||
} |
|||
} |
|||
} catch (const fs::filesystem_error&) |
|||
{ |
|||
/* Parent directory does not exist or is not accessible */ |
|||
replyStatus = ST_ERROR; |
|||
replyMessage = tr("Cannot create data directory here."); |
|||
} |
|||
Q_EMIT reply(replyStatus, replyMessage, freeBytesAvailable); |
|||
} |
|||
|
|||
|
|||
Intro::Intro(QWidget *parent) : |
|||
QDialog(parent), |
|||
ui(new Ui::Intro), |
|||
thread(0), |
|||
signalled(false) |
|||
{ |
|||
ui->setupUi(this); |
|||
ui->sizeWarningLabel->setText(ui->sizeWarningLabel->text().arg(BLOCK_CHAIN_SIZE/GB_BYTES)); |
|||
startThread(); |
|||
} |
|||
|
|||
Intro::~Intro() |
|||
{ |
|||
delete ui; |
|||
/* Ensure thread is finished before it is deleted */ |
|||
Q_EMIT stopThread(); |
|||
thread->wait(); |
|||
} |
|||
|
|||
QString Intro::getDataDirectory() |
|||
{ |
|||
return ui->dataDirectory->text(); |
|||
} |
|||
|
|||
void Intro::setDataDirectory(const QString &dataDir) |
|||
{ |
|||
ui->dataDirectory->setText(dataDir); |
|||
if(dataDir == getDefaultDataDirectory()) |
|||
{ |
|||
ui->dataDirDefault->setChecked(true); |
|||
ui->dataDirectory->setEnabled(false); |
|||
ui->ellipsisButton->setEnabled(false); |
|||
} else { |
|||
ui->dataDirCustom->setChecked(true); |
|||
ui->dataDirectory->setEnabled(true); |
|||
ui->ellipsisButton->setEnabled(true); |
|||
} |
|||
} |
|||
|
|||
QString Intro::getDefaultDataDirectory() |
|||
{ |
|||
return GUIUtil::boostPathToQString(GetDefaultDataDir()); |
|||
} |
|||
|
|||
void Intro::pickDataDirectory() |
|||
{ |
|||
namespace fs = boost::filesystem; |
|||
QSettings settings; |
|||
/* If data directory provided on command line, no need to look at settings
|
|||
or show a picking dialog */ |
|||
if(!GetArg("-datadir", "").empty()) |
|||
return; |
|||
/* 1) Default data directory for operating system */ |
|||
QString dataDir = getDefaultDataDirectory(); |
|||
/* 2) Allow QSettings to override default dir */ |
|||
dataDir = settings.value("strDataDir", dataDir).toString(); |
|||
|
|||
if(!fs::exists(GUIUtil::qstringToBoostPath(dataDir)) || GetBoolArg("-choosedatadir", false)) |
|||
{ |
|||
/* If current default data directory does not exist, let the user choose one */ |
|||
Intro intro; |
|||
intro.setDataDirectory(dataDir); |
|||
intro.setWindowIcon(SingleColorIcon(":icons/bitcoin")); |
|||
|
|||
while(true) |
|||
{ |
|||
if(!intro.exec()) |
|||
{ |
|||
/* Cancel clicked */ |
|||
exit(0); |
|||
} |
|||
dataDir = intro.getDataDirectory(); |
|||
try { |
|||
TryCreateDirectory(GUIUtil::qstringToBoostPath(dataDir)); |
|||
break; |
|||
} catch (const fs::filesystem_error&) { |
|||
QMessageBox::critical(0, tr("Bitcoin Core"), |
|||
tr("Error: Specified data directory \"%1\" cannot be created.").arg(dataDir)); |
|||
/* fall through, back to choosing screen */ |
|||
} |
|||
} |
|||
|
|||
settings.setValue("strDataDir", dataDir); |
|||
} |
|||
/* Only override -datadir if different from the default, to make it possible to
|
|||
* override -datadir in the komodo.conf file in the default data directory |
|||
* (to be consistent with bitcoind behavior) |
|||
*/ |
|||
if(dataDir != getDefaultDataDirectory()) |
|||
SoftSetArg("-datadir", GUIUtil::qstringToBoostPath(dataDir).string()); // use OS locale for path setting
|
|||
} |
|||
|
|||
void Intro::setStatus(int status, const QString &message, quint64 bytesAvailable) |
|||
{ |
|||
switch(status) |
|||
{ |
|||
case FreespaceChecker::ST_OK: |
|||
ui->errorMessage->setText(message); |
|||
ui->errorMessage->setStyleSheet(""); |
|||
break; |
|||
case FreespaceChecker::ST_ERROR: |
|||
ui->errorMessage->setText(tr("Error") + ": " + message); |
|||
ui->errorMessage->setStyleSheet("QLabel { color: #800000 }"); |
|||
break; |
|||
} |
|||
/* Indicate number of bytes available */ |
|||
if(status == FreespaceChecker::ST_ERROR) |
|||
{ |
|||
ui->freeSpace->setText(""); |
|||
} else { |
|||
QString freeString = tr("%n GB of free space available", "", bytesAvailable/GB_BYTES); |
|||
if(bytesAvailable < BLOCK_CHAIN_SIZE) |
|||
{ |
|||
freeString += " " + tr("(of %n GB needed)", "", BLOCK_CHAIN_SIZE/GB_BYTES); |
|||
ui->freeSpace->setStyleSheet("QLabel { color: #800000 }"); |
|||
} else { |
|||
ui->freeSpace->setStyleSheet(""); |
|||
} |
|||
ui->freeSpace->setText(freeString + "."); |
|||
} |
|||
/* Don't allow confirm in ERROR state */ |
|||
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(status != FreespaceChecker::ST_ERROR); |
|||
} |
|||
|
|||
void Intro::on_dataDirectory_textChanged(const QString &dataDirStr) |
|||
{ |
|||
/* Disable OK button until check result comes in */ |
|||
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); |
|||
checkPath(dataDirStr); |
|||
} |
|||
|
|||
void Intro::on_ellipsisButton_clicked() |
|||
{ |
|||
QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(0, "Choose data directory", ui->dataDirectory->text())); |
|||
if(!dir.isEmpty()) |
|||
ui->dataDirectory->setText(dir); |
|||
} |
|||
|
|||
void Intro::on_dataDirDefault_clicked() |
|||
{ |
|||
setDataDirectory(getDefaultDataDirectory()); |
|||
} |
|||
|
|||
void Intro::on_dataDirCustom_clicked() |
|||
{ |
|||
ui->dataDirectory->setEnabled(true); |
|||
ui->ellipsisButton->setEnabled(true); |
|||
} |
|||
|
|||
void Intro::startThread() |
|||
{ |
|||
thread = new QThread(this); |
|||
FreespaceChecker *executor = new FreespaceChecker(this); |
|||
executor->moveToThread(thread); |
|||
|
|||
connect(executor, SIGNAL(reply(int,QString,quint64)), this, SLOT(setStatus(int,QString,quint64))); |
|||
connect(this, SIGNAL(requestCheck()), executor, SLOT(check())); |
|||
/* make sure executor object is deleted in its own thread */ |
|||
connect(this, SIGNAL(stopThread()), executor, SLOT(deleteLater())); |
|||
connect(this, SIGNAL(stopThread()), thread, SLOT(quit())); |
|||
|
|||
thread->start(); |
|||
} |
|||
|
|||
void Intro::checkPath(const QString &dataDir) |
|||
{ |
|||
mutex.lock(); |
|||
pathToCheck = dataDir; |
|||
if(!signalled) |
|||
{ |
|||
signalled = true; |
|||
Q_EMIT requestCheck(); |
|||
} |
|||
mutex.unlock(); |
|||
} |
|||
|
|||
QString Intro::getPathToCheck() |
|||
{ |
|||
QString retval; |
|||
mutex.lock(); |
|||
retval = pathToCheck; |
|||
signalled = false; /* new request can be queued now */ |
|||
mutex.unlock(); |
|||
return retval; |
|||
} |
@ -1,91 +0,0 @@ |
|||
// Copyright (c) 2011-2013 The Bitcoin Core developers |
|||
// Distributed under the MIT software license, see the accompanying |
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. |
|||
|
|||
#include "macnotificationhandler.h" |
|||
|
|||
#undef slots |
|||
#import <objc/runtime.h> |
|||
#include <Cocoa/Cocoa.h> |
|||
|
|||
// Add an obj-c category (extension) to return the expected bundle identifier |
|||
@implementation NSBundle(returnCorrectIdentifier) |
|||
- (NSString *)__bundleIdentifier |
|||
{ |
|||
if (self == [NSBundle mainBundle]) { |
|||
return @"org.bitcoinfoundation.Komodo-Qt"; |
|||
} else { |
|||
return [self __bundleIdentifier]; |
|||
} |
|||
} |
|||
@end |
|||
|
|||
void MacNotificationHandler::showNotification(const QString &title, const QString &text) |
|||
{ |
|||
// check if users OS has support for NSUserNotification |
|||
if(this->hasUserNotificationCenterSupport()) { |
|||
// okay, seems like 10.8+ |
|||
QByteArray utf8 = title.toUtf8(); |
|||
char* cString = (char *)utf8.constData(); |
|||
NSString *titleMac = [[NSString alloc] initWithUTF8String:cString]; |
|||
|
|||
utf8 = text.toUtf8(); |
|||
cString = (char *)utf8.constData(); |
|||
NSString *textMac = [[NSString alloc] initWithUTF8String:cString]; |
|||
|
|||
// do everything weak linked (because we will keep <10.8 compatibility) |
|||
id userNotification = [[NSClassFromString(@"NSUserNotification") alloc] init]; |
|||
[userNotification performSelector:@selector(setTitle:) withObject:titleMac]; |
|||
[userNotification performSelector:@selector(setInformativeText:) withObject:textMac]; |
|||
|
|||
id notificationCenterInstance = [NSClassFromString(@"NSUserNotificationCenter") performSelector:@selector(defaultUserNotificationCenter)]; |
|||
[notificationCenterInstance performSelector:@selector(deliverNotification:) withObject:userNotification]; |
|||
|
|||
[titleMac release]; |
|||
[textMac release]; |
|||
[userNotification release]; |
|||
} |
|||
} |
|||
|
|||
// sendAppleScript just take a QString and executes it as apple script |
|||
void MacNotificationHandler::sendAppleScript(const QString &script) |
|||
{ |
|||
QByteArray utf8 = script.toUtf8(); |
|||
char* cString = (char *)utf8.constData(); |
|||
NSString *scriptApple = [[NSString alloc] initWithUTF8String:cString]; |
|||
|
|||
NSAppleScript *as = [[NSAppleScript alloc] initWithSource:scriptApple]; |
|||
NSDictionary *err = nil; |
|||
[as executeAndReturnError:&err]; |
|||
[as release]; |
|||
[scriptApple release]; |
|||
} |
|||
|
|||
bool MacNotificationHandler::hasUserNotificationCenterSupport(void) |
|||
{ |
|||
Class possibleClass = NSClassFromString(@"NSUserNotificationCenter"); |
|||
|
|||
// check if users OS has support for NSUserNotification |
|||
if(possibleClass!=nil) { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
|
|||
MacNotificationHandler *MacNotificationHandler::instance() |
|||
{ |
|||
static MacNotificationHandler *s_instance = NULL; |
|||
if (!s_instance) { |
|||
s_instance = new MacNotificationHandler(); |
|||
|
|||
Class aPossibleClass = objc_getClass("NSBundle"); |
|||
if (aPossibleClass) { |
|||
// change NSBundle -bundleIdentifier method to return a correct bundle identifier |
|||
// a bundle identifier is required to use OSXs User Notification Center |
|||
method_exchangeImplementations(class_getInstanceMethod(aPossibleClass, @selector(bundleIdentifier)), |
|||
class_getInstanceMethod(aPossibleClass, @selector(__bundleIdentifier))); |
|||
} |
|||
} |
|||
return s_instance; |
|||
} |
@ -1,37 +0,0 @@ |
|||
IDI_ICON1 ICON DISCARDABLE "icons/bitcoin.ico" |
|||
|
|||
#include <windows.h> // needed for VERSIONINFO |
|||
#include "../../clientversion.h" // holds the needed client version information |
|||
|
|||
#define VER_PRODUCTVERSION CLIENT_VERSION_MAJOR,CLIENT_VERSION_MINOR,CLIENT_VERSION_REVISION,CLIENT_VERSION_BUILD |
|||
#define VER_PRODUCTVERSION_STR STRINGIZE(CLIENT_VERSION_MAJOR) "." STRINGIZE(CLIENT_VERSION_MINOR) "." STRINGIZE(CLIENT_VERSION_REVISION) "." STRINGIZE(CLIENT_VERSION_BUILD) |
|||
#define VER_FILEVERSION VER_PRODUCTVERSION |
|||
#define VER_FILEVERSION_STR VER_PRODUCTVERSION_STR |
|||
|
|||
VS_VERSION_INFO VERSIONINFO |
|||
FILEVERSION VER_FILEVERSION |
|||
PRODUCTVERSION VER_PRODUCTVERSION |
|||
FILEOS VOS_NT_WINDOWS32 |
|||
FILETYPE VFT_APP |
|||
BEGIN |
|||
BLOCK "StringFileInfo" |
|||
BEGIN |
|||
BLOCK "040904E4" // U.S. English - multilingual (hex) |
|||
BEGIN |
|||
VALUE "CompanyName", "Bitcoin" |
|||
VALUE "FileDescription", "Bitcoin Core (GUI node for Bitcoin)" |
|||
VALUE "FileVersion", VER_FILEVERSION_STR |
|||
VALUE "InternalName", "komodo-qt" |
|||
VALUE "LegalCopyright", COPYRIGHT_STR |
|||
VALUE "LegalTrademarks1", "Distributed under the MIT software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." |
|||
VALUE "OriginalFilename", "komodo-qt.exe" |
|||
VALUE "ProductName", "Bitcoin Core" |
|||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR |
|||
END |
|||
END |
|||
|
|||
BLOCK "VarFileInfo" |
|||
BEGIN |
|||
VALUE "Translation", 0x0, 1252 // language neutral - multilingual (decimal) |
|||
END |
|||
END |
@ -1,49 +0,0 @@ |
|||
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
|||
// Distributed under the MIT software license, see the accompanying
|
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|||
|
|||
#if defined(HAVE_CONFIG_H) |
|||
#include "config/bitcoin-config.h" |
|||
#endif |
|||
|
|||
#include "util.h" |
|||
#include "uritests.h" |
|||
|
|||
#ifdef ENABLE_WALLET |
|||
#include "paymentservertests.h" |
|||
#endif |
|||
|
|||
#include <QCoreApplication> |
|||
#include <QObject> |
|||
#include <QTest> |
|||
|
|||
#if defined(QT_STATICPLUGIN) && QT_VERSION < 0x050000 |
|||
#include <QtPlugin> |
|||
Q_IMPORT_PLUGIN(qcncodecs) |
|||
Q_IMPORT_PLUGIN(qjpcodecs) |
|||
Q_IMPORT_PLUGIN(qtwcodecs) |
|||
Q_IMPORT_PLUGIN(qkrcodecs) |
|||
#endif |
|||
|
|||
// This is all you need to run all the tests
|
|||
int main(int argc, char *argv[]) |
|||
{ |
|||
SetupEnvironment(); |
|||
bool fInvalid = false; |
|||
|
|||
// Don't remove this, it's needed to access
|
|||
// QCoreApplication:: in the tests
|
|||
QCoreApplication app(argc, argv); |
|||
app.setApplicationName("Komodo-Qt-test"); |
|||
|
|||
URITests test1; |
|||
if (QTest::qExec(&test1) != 0) |
|||
fInvalid = true; |
|||
#ifdef ENABLE_WALLET |
|||
PaymentServerTests test2; |
|||
if (QTest::qExec(&test2) != 0) |
|||
fInvalid = true; |
|||
#endif |
|||
|
|||
return fInvalid; |
|||
} |
@ -1,326 +0,0 @@ |
|||
// Copyright (c) 2011-2014 The Bitcoin Core developers
|
|||
// Distributed under the MIT software license, see the accompanying
|
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|||
|
|||
#include "transactiondesc.h" |
|||
|
|||
#include "bitcoinunits.h" |
|||
#include "guiutil.h" |
|||
#include "paymentserver.h" |
|||
#include "transactionrecord.h" |
|||
|
|||
#include "base58.h" |
|||
#include "consensus/consensus.h" |
|||
#include "main.h" |
|||
#include "script/script.h" |
|||
#include "timedata.h" |
|||
#include "util.h" |
|||
#include "wallet/db.h" |
|||
#include "wallet/wallet.h" |
|||
|
|||
#include <stdint.h> |
|||
#include <string> |
|||
|
|||
using namespace std; |
|||
|
|||
QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx) |
|||
{ |
|||
AssertLockHeld(cs_main); |
|||
if (!CheckFinalTx(wtx)) |
|||
{ |
|||
if (wtx.nLockTime < LOCKTIME_THRESHOLD) |
|||
return tr("Open for %n more block(s)", "", wtx.nLockTime - chainActive.Height()); |
|||
else |
|||
return tr("Open until %1").arg(GUIUtil::dateTimeStr(wtx.nLockTime)); |
|||
} |
|||
else |
|||
{ |
|||
int nDepth = wtx.GetDepthInMainChain(); |
|||
if (nDepth < 0) |
|||
return tr("conflicted"); |
|||
else if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) |
|||
return tr("%1/offline").arg(nDepth); |
|||
else if (nDepth < 6) |
|||
return tr("%1/unconfirmed").arg(nDepth); |
|||
else |
|||
return tr("%1 confirmations").arg(nDepth); |
|||
} |
|||
} |
|||
|
|||
QString TransactionDesc::toHTML(CWallet *wallet, CWalletTx &wtx, TransactionRecord *rec, int unit) |
|||
{ |
|||
QString strHTML; |
|||
|
|||
LOCK2(cs_main, wallet->cs_wallet); |
|||
strHTML.reserve(4000); |
|||
strHTML += "<html><font face='verdana, arial, helvetica, sans-serif'>"; |
|||
|
|||
int64_t nTime = wtx.GetTxTime(); |
|||
CAmount nCredit = wtx.GetCredit(ISMINE_ALL); |
|||
CAmount nDebit = wtx.GetDebit(ISMINE_ALL); |
|||
CAmount nNet = nCredit - nDebit; |
|||
|
|||
strHTML += "<b>" + tr("Status") + ":</b> " + FormatTxStatus(wtx); |
|||
int nRequests = wtx.GetRequestCount(); |
|||
if (nRequests != -1) |
|||
{ |
|||
if (nRequests == 0) |
|||
strHTML += tr(", has not been successfully broadcast yet"); |
|||
else if (nRequests > 0) |
|||
strHTML += tr(", broadcast through %n node(s)", "", nRequests); |
|||
} |
|||
strHTML += "<br>"; |
|||
|
|||
strHTML += "<b>" + tr("Date") + ":</b> " + (nTime ? GUIUtil::dateTimeStr(nTime) : "") + "<br>"; |
|||
|
|||
//
|
|||
// From
|
|||
//
|
|||
if (wtx.IsCoinBase()) |
|||
{ |
|||
strHTML += "<b>" + tr("Source") + ":</b> " + tr("Generated") + "<br>"; |
|||
} |
|||
else if (wtx.mapValue.count("from") && !wtx.mapValue["from"].empty()) |
|||
{ |
|||
// Online transaction
|
|||
strHTML += "<b>" + tr("From") + ":</b> " + GUIUtil::HtmlEscape(wtx.mapValue["from"]) + "<br>"; |
|||
} |
|||
else |
|||
{ |
|||
// Offline transaction
|
|||
if (nNet > 0) |
|||
{ |
|||
// Credit
|
|||
if (CBitcoinAddress(rec->address).IsValid()) |
|||
{ |
|||
CTxDestination address = CBitcoinAddress(rec->address).Get(); |
|||
if (wallet->mapAddressBook.count(address)) |
|||
{ |
|||
strHTML += "<b>" + tr("From") + ":</b> " + tr("unknown") + "<br>"; |
|||
strHTML += "<b>" + tr("To") + ":</b> "; |
|||
strHTML += GUIUtil::HtmlEscape(rec->address); |
|||
QString addressOwned = (::IsMine(*wallet, address) == ISMINE_SPENDABLE) ? tr("own address") : tr("watch-only"); |
|||
if (!wallet->mapAddressBook[address].name.empty()) |
|||
strHTML += " (" + addressOwned + ", " + tr("label") + ": " + GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + ")"; |
|||
else |
|||
strHTML += " (" + addressOwned + ")"; |
|||
strHTML += "<br>"; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//
|
|||
// To
|
|||
//
|
|||
if (wtx.mapValue.count("to") && !wtx.mapValue["to"].empty()) |
|||
{ |
|||
// Online transaction
|
|||
std::string strAddress = wtx.mapValue["to"]; |
|||
strHTML += "<b>" + tr("To") + ":</b> "; |
|||
CTxDestination dest = CBitcoinAddress(strAddress).Get(); |
|||
if (wallet->mapAddressBook.count(dest) && !wallet->mapAddressBook[dest].name.empty()) |
|||
strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[dest].name) + " "; |
|||
strHTML += GUIUtil::HtmlEscape(strAddress) + "<br>"; |
|||
} |
|||
|
|||
//
|
|||
// Amount
|
|||
//
|
|||
if (wtx.IsCoinBase() && nCredit == 0) |
|||
{ |
|||
//
|
|||
// Coinbase
|
|||
//
|
|||
CAmount nUnmatured = 0; |
|||
for (int i = 0; i < wtx.vout.size(); i++) |
|||
nUnmatured += wallet->GetCredit(wtx, i, ISMINE_ALL); |
|||
|
|||
strHTML += "<b>" + tr("Credit") + ":</b> "; |
|||
if (wtx.IsInMainChain()) |
|||
strHTML += BitcoinUnits::formatHtmlWithUnit(unit, nUnmatured)+ " (" + tr("matures in %n more block(s)", "", wtx.GetBlocksToMaturity()) + ")"; |
|||
else |
|||
strHTML += "(" + tr("not accepted") + ")"; |
|||
strHTML += "<br>"; |
|||
} |
|||
else if (nNet > 0) |
|||
{ |
|||
//
|
|||
// Credit
|
|||
//
|
|||
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, nNet) + "<br>"; |
|||
} |
|||
else |
|||
{ |
|||
isminetype fAllFromMe = ISMINE_SPENDABLE; |
|||
BOOST_FOREACH(const CTxIn& txin, wtx.vin) |
|||
{ |
|||
isminetype mine = wallet->IsMine(txin); |
|||
if(fAllFromMe > mine) fAllFromMe = mine; |
|||
} |
|||
|
|||
isminetype fAllToMe = ISMINE_SPENDABLE; |
|||
for (int i = 0; i < wtx.vout.size(); i++) |
|||
{ |
|||
isminetype mine = wallet->IsMine(wtx, i); |
|||
if(fAllToMe > mine) fAllToMe = mine; |
|||
} |
|||
|
|||
if (fAllFromMe) |
|||
{ |
|||
if(fAllFromMe == ISMINE_WATCH_ONLY) |
|||
strHTML += "<b>" + tr("From") + ":</b> " + tr("watch-only") + "<br>"; |
|||
|
|||
//
|
|||
// Debit
|
|||
//
|
|||
for (int i = 0; i < wtx.vout.size(); i++) |
|||
{ |
|||
const CTxOut& txout = wtx.vout[i]; |
|||
// Ignore change
|
|||
isminetype toSelf = wallet->IsMine(wtx, i); |
|||
if ((toSelf == ISMINE_SPENDABLE) && (fAllFromMe == ISMINE_SPENDABLE)) |
|||
continue; |
|||
|
|||
if (!wtx.mapValue.count("to") || wtx.mapValue["to"].empty()) |
|||
{ |
|||
// Offline transaction
|
|||
CTxDestination address; |
|||
if (ExtractDestination(txout.scriptPubKey, address)) |
|||
{ |
|||
strHTML += "<b>" + tr("To") + ":</b> "; |
|||
if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].name.empty()) |
|||
strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + " "; |
|||
strHTML += GUIUtil::HtmlEscape(CBitcoinAddress(address).ToString()); |
|||
if(toSelf == ISMINE_SPENDABLE) |
|||
strHTML += " (own address)"; |
|||
else if(toSelf == ISMINE_WATCH_ONLY) |
|||
strHTML += " (watch-only)"; |
|||
strHTML += "<br>"; |
|||
} |
|||
} |
|||
|
|||
strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, -txout.nValue) + "<br>"; |
|||
if(toSelf) |
|||
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, txout.nValue) + "<br>"; |
|||
} |
|||
|
|||
if (fAllToMe) |
|||
{ |
|||
// Payment to self
|
|||
CAmount nChange = wtx.GetChange(); |
|||
CAmount nValue = nCredit - nChange; |
|||
strHTML += "<b>" + tr("Total debit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, -nValue) + "<br>"; |
|||
strHTML += "<b>" + tr("Total credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, nValue) + "<br>"; |
|||
} |
|||
|
|||
CAmount nTxFee = nDebit - wtx.GetValueOut(); |
|||
if (nTxFee > 0) |
|||
strHTML += "<b>" + tr("Transaction fee") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, -nTxFee) + "<br>"; |
|||
} |
|||
else |
|||
{ |
|||
//
|
|||
// Mixed debit transaction
|
|||
//
|
|||
BOOST_FOREACH(const CTxIn& txin, wtx.vin) |
|||
if (wallet->IsMine(txin)) |
|||
strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, -wallet->GetDebit(txin, ISMINE_ALL)) + "<br>"; |
|||
for (int i = 0; i < wtx.vout.size(); i++) |
|||
if (wallet->IsMine(wtx, i)) |
|||
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, wallet->GetCredit(wtx, i, ISMINE_ALL)) + "<br>"; |
|||
} |
|||
} |
|||
|
|||
strHTML += "<b>" + tr("Net amount") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, nNet, true) + "<br>"; |
|||
|
|||
//
|
|||
// Message
|
|||
//
|
|||
if (wtx.mapValue.count("message") && !wtx.mapValue["message"].empty()) |
|||
strHTML += "<br><b>" + tr("Message") + ":</b><br>" + GUIUtil::HtmlEscape(wtx.mapValue["message"], true) + "<br>"; |
|||
if (wtx.mapValue.count("comment") && !wtx.mapValue["comment"].empty()) |
|||
strHTML += "<br><b>" + tr("Comment") + ":</b><br>" + GUIUtil::HtmlEscape(wtx.mapValue["comment"], true) + "<br>"; |
|||
|
|||
strHTML += "<b>" + tr("Transaction ID") + ":</b> " + TransactionRecord::formatSubTxId(wtx.GetHash(), rec->idx) + "<br>"; |
|||
|
|||
// Message from normal bitcoin:URI (bitcoin:123...?message=example)
|
|||
Q_FOREACH (const PAIRTYPE(string, string)& r, wtx.vOrderForm) |
|||
if (r.first == "Message") |
|||
strHTML += "<br><b>" + tr("Message") + ":</b><br>" + GUIUtil::HtmlEscape(r.second, true) + "<br>"; |
|||
|
|||
//
|
|||
// PaymentRequest info:
|
|||
//
|
|||
Q_FOREACH (const PAIRTYPE(string, string)& r, wtx.vOrderForm) |
|||
{ |
|||
if (r.first == "PaymentRequest") |
|||
{ |
|||
PaymentRequestPlus req; |
|||
req.parse(QByteArray::fromRawData(r.second.data(), r.second.size())); |
|||
QString merchant; |
|||
if (req.getMerchant(PaymentServer::getCertStore(), merchant)) |
|||
strHTML += "<b>" + tr("Merchant") + ":</b> " + GUIUtil::HtmlEscape(merchant) + "<br>"; |
|||
} |
|||
} |
|||
|
|||
if (wtx.IsCoinBase()) |
|||
{ |
|||
extern char ASSETCHAINS_SYMBOL[KOMODO_ASSETCHAIN_MAXLEN]; |
|||
if ( ASSETCHAINS_SYMBOL[0] == 0 ) |
|||
COINBASE_MATURITY = _COINBASE_MATURITY; |
|||
quint32 numBlocksToMaturity = COINBASE_MATURITY + 1; |
|||
strHTML += "<br>" + tr("Generated coins must mature %1 blocks and have any applicable time locks open before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, its state will change to \"not accepted\" and it won't be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.").arg(QString::number(numBlocksToMaturity)) + "<br>"; |
|||
// we need to display any possible CLTV lock time
|
|||
} |
|||
|
|||
//
|
|||
// Debug view
|
|||
//
|
|||
if (fDebug) |
|||
{ |
|||
strHTML += "<hr><br>" + tr("Debug information") + "<br><br>"; |
|||
BOOST_FOREACH(const CTxIn& txin, wtx.vin) |
|||
if(wallet->IsMine(txin)) |
|||
strHTML += "<b>" + tr("Debit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, -wallet->GetDebit(txin, ISMINE_ALL)) + "<br>"; |
|||
for (int i = 0; i < wtx.vout.size(); i++) |
|||
if (wallet->IsMine(wtx, i)) |
|||
strHTML += "<b>" + tr("Credit") + ":</b> " + BitcoinUnits::formatHtmlWithUnit(unit, wallet->GetCredit(wtx, i, ISMINE_ALL)) + "<br>"; |
|||
|
|||
strHTML += "<br><b>" + tr("Transaction") + ":</b><br>"; |
|||
strHTML += GUIUtil::HtmlEscape(wtx.ToString(), true); |
|||
|
|||
strHTML += "<br><b>" + tr("Inputs") + ":</b>"; |
|||
strHTML += "<ul>"; |
|||
|
|||
BOOST_FOREACH(const CTxIn& txin, wtx.vin) |
|||
{ |
|||
COutPoint prevout = txin.prevout; |
|||
|
|||
CCoins prev; |
|||
if(pcoinsTip->GetCoins(prevout.hash, prev)) |
|||
{ |
|||
if (prevout.n < prev.vout.size()) |
|||
{ |
|||
strHTML += "<li>"; |
|||
const CTxOut &vout = prev.vout[prevout.n]; |
|||
CTxDestination address; |
|||
if (ExtractDestination(vout.scriptPubKey, address)) |
|||
{ |
|||
if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].name.empty()) |
|||
strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + " "; |
|||
strHTML += QString::fromStdString(CBitcoinAddress(address).ToString()); |
|||
} |
|||
strHTML = strHTML + " " + tr("Amount") + "=" + BitcoinUnits::formatHtmlWithUnit(unit, vout.nValue); |
|||
strHTML = strHTML + " IsMine=" + (wallet->IsMine(prev, prevout.n) & ISMINE_SPENDABLE ? tr("true") : tr("false")) + "</li>"; |
|||
strHTML = strHTML + " IsWatchOnly=" + (wallet->IsMine(prev, prevout.n) & ISMINE_WATCH_ONLY ? tr("true") : tr("false")) + "</li>"; |
|||
} |
|||
} |
|||
} |
|||
|
|||
strHTML += "</ul>"; |
|||
} |
|||
|
|||
strHTML += "</font></html>"; |
|||
return strHTML; |
|||
} |
@ -1,173 +0,0 @@ |
|||
// Copyright (c) 2011-2014 The Bitcoin Core developers
|
|||
// Distributed under the MIT software license, see the accompanying
|
|||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|||
|
|||
#include "utilitydialog.h" |
|||
|
|||
#include "ui_helpmessagedialog.h" |
|||
|
|||
#include "bitcoingui.h" |
|||
#include "clientmodel.h" |
|||
#include "guiutil.h" |
|||
|
|||
#include "clientversion.h" |
|||
#include "init.h" |
|||
#include "util.h" |
|||
|
|||
#include <stdio.h> |
|||
|
|||
#include <QCloseEvent> |
|||
#include <QLabel> |
|||
#include <QRegExp> |
|||
#include <QTextTable> |
|||
#include <QTextCursor> |
|||
#include <QVBoxLayout> |
|||
|
|||
/** "Help message" or "About" dialog box */ |
|||
HelpMessageDialog::HelpMessageDialog(QWidget *parent, bool about) : |
|||
QDialog(parent), |
|||
ui(new Ui::HelpMessageDialog) |
|||
{ |
|||
ui->setupUi(this); |
|||
|
|||
QString version = tr("Bitcoin Core") + " " + tr("version") + " " + QString::fromStdString(FormatFullVersion()); |
|||
/* On x86 add a bit specifier to the version so that users can distinguish between
|
|||
* 32 and 64 bit builds. On other architectures, 32/64 bit may be more ambigious. |
|||
*/ |
|||
#if defined(__x86_64__) |
|||
version += " " + tr("(%1-bit)").arg(64); |
|||
#elif defined(__i386__ ) |
|||
version += " " + tr("(%1-bit)").arg(32); |
|||
#endif |
|||
|
|||
if (about) |
|||
{ |
|||
setWindowTitle(tr("About Bitcoin Core")); |
|||
|
|||
/// HTML-format the license message from the core
|
|||
QString licenseInfo = QString::fromStdString(LicenseInfo()); |
|||
QString licenseInfoHTML = licenseInfo; |
|||
// Make URLs clickable
|
|||
QRegExp uri("<(.*)>", Qt::CaseSensitive, QRegExp::RegExp2); |
|||
uri.setMinimal(true); // use non-greedy matching
|
|||
licenseInfoHTML.replace(uri, "<a href=\"\\1\">\\1</a>"); |
|||
// Replace newlines with HTML breaks
|
|||
licenseInfoHTML.replace("\n\n", "<br><br>"); |
|||
|
|||
ui->aboutMessage->setTextFormat(Qt::RichText); |
|||
ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); |
|||
text = version + "\n" + licenseInfo; |
|||
ui->aboutMessage->setText(version + "<br><br>" + licenseInfoHTML); |
|||
ui->aboutMessage->setWordWrap(true); |
|||
ui->helpMessage->setVisible(false); |
|||
} else { |
|||
setWindowTitle(tr("Command-line options")); |
|||
QString header = tr("Usage:") + "\n" + |
|||
" komodo-qt [" + tr("command-line options") + "] " + "\n"; |
|||
QTextCursor cursor(ui->helpMessage->document()); |
|||
cursor.insertText(version); |
|||
cursor.insertBlock(); |
|||
cursor.insertText(header); |
|||
cursor.insertBlock(); |
|||
|
|||
QString coreOptions = QString::fromStdString(HelpMessage(HMM_BITCOIN_QT)); |
|||
text = version + "\n" + header + "\n" + coreOptions; |
|||
|
|||
QTextTableFormat tf; |
|||
tf.setBorderStyle(QTextFrameFormat::BorderStyle_None); |
|||
tf.setCellPadding(2); |
|||
QVector<QTextLength> widths; |
|||
widths << QTextLength(QTextLength::PercentageLength, 35); |
|||
widths << QTextLength(QTextLength::PercentageLength, 65); |
|||
tf.setColumnWidthConstraints(widths); |
|||
|
|||
QTextCharFormat bold; |
|||
bold.setFontWeight(QFont::Bold); |
|||
|
|||
Q_FOREACH (const QString &line, coreOptions.split("\n")) { |
|||
if (line.startsWith(" -")) |
|||
{ |
|||
cursor.currentTable()->appendRows(1); |
|||
cursor.movePosition(QTextCursor::PreviousCell); |
|||
cursor.movePosition(QTextCursor::NextRow); |
|||
cursor.insertText(line.trimmed()); |
|||
cursor.movePosition(QTextCursor::NextCell); |
|||
} else if (line.startsWith(" ")) { |
|||
cursor.insertText(line.trimmed()+' '); |
|||
} else if (line.size() > 0) { |
|||
//Title of a group
|
|||
if (cursor.currentTable()) |
|||
cursor.currentTable()->appendRows(1); |
|||
cursor.movePosition(QTextCursor::Down); |
|||
cursor.insertText(line.trimmed(), bold); |
|||
cursor.insertTable(1, 2, tf); |
|||
} |
|||
} |
|||
|
|||
ui->helpMessage->moveCursor(QTextCursor::Start); |
|||
ui->scrollArea->setVisible(false); |
|||
ui->aboutLogo->setVisible(false); |
|||
} |
|||
} |
|||
|
|||
HelpMessageDialog::~HelpMessageDialog() |
|||
{ |
|||
delete ui; |
|||
} |
|||
|
|||
void HelpMessageDialog::printToConsole() |
|||
{ |
|||
// On other operating systems, the expected action is to print the message to the console.
|
|||
fprintf(stdout, "%s\n", qPrintable(text)); |
|||
} |
|||
|
|||
void HelpMessageDialog::showOrPrint() |
|||
{ |
|||
#if defined(WIN32) |
|||
// On Windows, show a message box, as there is no stderr/stdout in windowed applications
|
|||
exec(); |
|||
#else |
|||
// On other operating systems, print help text to console
|
|||
printToConsole(); |
|||
#endif |
|||
} |
|||
|
|||
void HelpMessageDialog::on_okButton_accepted() |
|||
{ |
|||
close(); |
|||
} |
|||
|
|||
|
|||
/** "Shutdown" window */ |
|||
ShutdownWindow::ShutdownWindow(QWidget *parent, Qt::WindowFlags f): |
|||
QWidget(parent, f) |
|||
{ |
|||
QVBoxLayout *layout = new QVBoxLayout(); |
|||
layout->addWidget(new QLabel( |
|||
tr("Bitcoin Core is shutting down...") + "<br /><br />" + |
|||
tr("Do not shut down the computer until this window disappears."))); |
|||
setLayout(layout); |
|||
} |
|||
|
|||
void ShutdownWindow::showShutdownWindow(BitcoinGUI *window) |
|||
{ |
|||
if (!window) |
|||
return; |
|||
|
|||
// Show a simple window indicating shutdown status
|
|||
QWidget *shutdownWindow = new ShutdownWindow(); |
|||
// We don't hold a direct pointer to the shutdown window after creation, so use
|
|||
// Qt::WA_DeleteOnClose to make sure that the window will be deleted eventually.
|
|||
shutdownWindow->setAttribute(Qt::WA_DeleteOnClose); |
|||
shutdownWindow->setWindowTitle(window->windowTitle()); |
|||
|
|||
// Center shutdown window at where main window was
|
|||
const QPoint global = window->mapToGlobal(window->rect().center()); |
|||
shutdownWindow->move(global.x() - shutdownWindow->width() / 2, global.y() - shutdownWindow->height() / 2); |
|||
shutdownWindow->show(); |
|||
} |
|||
|
|||
void ShutdownWindow::closeEvent(QCloseEvent *event) |
|||
{ |
|||
event->ignore(); |
|||
} |
Loading…
Reference in new issue