bitcoin-ruby 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +12 -0
- data/COPYING +18 -0
- data/Gemfile +4 -0
- data/README.rdoc +189 -0
- data/Rakefile +104 -0
- data/bin/bitcoin_dns_seed +130 -0
- data/bin/bitcoin_gui +80 -0
- data/bin/bitcoin_node +174 -0
- data/bin/bitcoin_shell +12 -0
- data/bin/bitcoin_wallet +323 -0
- data/bitcoin-ruby.gemspec +27 -0
- data/concept-examples/blockchain-pow.rb +151 -0
- data/doc/CONFIG.rdoc +66 -0
- data/doc/EXAMPLES.rdoc +9 -0
- data/doc/NODE.rdoc +35 -0
- data/doc/STORAGE.rdoc +21 -0
- data/doc/WALLET.rdoc +102 -0
- data/examples/balance.rb +60 -0
- data/examples/bbe_verify_tx.rb +55 -0
- data/examples/connect.rb +36 -0
- data/examples/relay_tx.rb +22 -0
- data/examples/verify_tx.rb +57 -0
- data/lib/bitcoin.rb +370 -0
- data/lib/bitcoin/builder.rb +266 -0
- data/lib/bitcoin/config.rb +56 -0
- data/lib/bitcoin/connection.rb +126 -0
- data/lib/bitcoin/ffi/openssl.rb +121 -0
- data/lib/bitcoin/gui/addr_view.rb +42 -0
- data/lib/bitcoin/gui/bitcoin-ruby.png +0 -0
- data/lib/bitcoin/gui/bitcoin-ruby.svg +80 -0
- data/lib/bitcoin/gui/conn_view.rb +36 -0
- data/lib/bitcoin/gui/connection.rb +68 -0
- data/lib/bitcoin/gui/em_gtk.rb +28 -0
- data/lib/bitcoin/gui/gui.builder +1643 -0
- data/lib/bitcoin/gui/gui.rb +290 -0
- data/lib/bitcoin/gui/helpers.rb +113 -0
- data/lib/bitcoin/gui/tree_view.rb +82 -0
- data/lib/bitcoin/gui/tx_view.rb +67 -0
- data/lib/bitcoin/key.rb +125 -0
- data/lib/bitcoin/logger.rb +65 -0
- data/lib/bitcoin/network/command_client.rb +93 -0
- data/lib/bitcoin/network/command_handler.rb +179 -0
- data/lib/bitcoin/network/connection_handler.rb +274 -0
- data/lib/bitcoin/network/node.rb +399 -0
- data/lib/bitcoin/protocol.rb +140 -0
- data/lib/bitcoin/protocol/address.rb +48 -0
- data/lib/bitcoin/protocol/alert.rb +47 -0
- data/lib/bitcoin/protocol/block.rb +154 -0
- data/lib/bitcoin/protocol/handler.rb +38 -0
- data/lib/bitcoin/protocol/parser.rb +148 -0
- data/lib/bitcoin/protocol/tx.rb +205 -0
- data/lib/bitcoin/protocol/txin.rb +97 -0
- data/lib/bitcoin/protocol/txout.rb +73 -0
- data/lib/bitcoin/protocol/version.rb +70 -0
- data/lib/bitcoin/script.rb +634 -0
- data/lib/bitcoin/storage/dummy.rb +164 -0
- data/lib/bitcoin/storage/models.rb +133 -0
- data/lib/bitcoin/storage/sequel.rb +335 -0
- data/lib/bitcoin/storage/sequel_store/sequel_migrations.rb +84 -0
- data/lib/bitcoin/storage/storage.rb +243 -0
- data/lib/bitcoin/version.rb +3 -0
- data/lib/bitcoin/wallet/coinselector.rb +30 -0
- data/lib/bitcoin/wallet/keygenerator.rb +75 -0
- data/lib/bitcoin/wallet/keystore.rb +203 -0
- data/lib/bitcoin/wallet/txdp.rb +116 -0
- data/lib/bitcoin/wallet/wallet.rb +243 -0
- data/spec/bitcoin/bitcoin_spec.rb +472 -0
- data/spec/bitcoin/builder_spec.rb +90 -0
- data/spec/bitcoin/fixtures/0d0affb5964abe804ffe85e53f1dbb9f29e406aa3046e2db04fba240e63c7fdd.json +27 -0
- data/spec/bitcoin/fixtures/23b397edccd3740a74adb603c9756370fafcde9bcc4483eb271ecad09a94dd63.json +23 -0
- data/spec/bitcoin/fixtures/477fff140b363ec2cc51f3a65c0c58eda38f4d41f04a295bbd62babf25e4c590.json +27 -0
- data/spec/bitcoin/fixtures/60a20bd93aa49ab4b28d514ec10b06e1829ce6818ec06cd3aabd013ebcdc4bb1.json +45 -0
- data/spec/bitcoin/fixtures/bc179baab547b7d7c1d5d8d6f8b0cc6318eaa4b0dd0a093ad6ac7f5a1cb6b3ba.json +34 -0
- data/spec/bitcoin/fixtures/rawblock-0.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-0.json +39 -0
- data/spec/bitcoin/fixtures/rawblock-1.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-1.json +39 -0
- data/spec/bitcoin/fixtures/rawblock-131025.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-131025.json +5063 -0
- data/spec/bitcoin/fixtures/rawblock-170.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-170.json +68 -0
- data/spec/bitcoin/fixtures/rawblock-9.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-9.json +39 -0
- data/spec/bitcoin/fixtures/rawblock-testnet-26478.bin +0 -0
- data/spec/bitcoin/fixtures/rawblock-testnet-26478.json +64 -0
- data/spec/bitcoin/fixtures/rawtx-01.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-01.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-02.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-02.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-03.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-03.json +48 -0
- data/spec/bitcoin/fixtures/rawtx-04.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-05.json +23 -0
- data/spec/bitcoin/fixtures/rawtx-14be6fff8c6014f7c9493b4a6e4a741699173f39d74431b6b844fcb41ebb9984.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-2f4a2717ec8c9f077a87dde6cbe0274d5238793a3f3f492b63c744837285e58a.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-2f4a2717ec8c9f077a87dde6cbe0274d5238793a3f3f492b63c744837285e58a.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-406b2b06bcd34d3c8733e6b79f7a394c8a431fbf4ff5ac705c93f4076bb77602.json +23 -0
- data/spec/bitcoin/fixtures/rawtx-52250a162c7d03d2e1fbc5ebd1801a88612463314b55102171c5b5d817d2d7b2.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-b5d4e8883533f99e5903ea2cf001a133a322fa6b1370b18a16c57c946a40823d.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-ba1ff5cd66713133c062a871a8adab92416f1e38d17786b2bf56ac5f6ffdfdf5.json +37 -0
- data/spec/bitcoin/fixtures/rawtx-c99c49da4c38af669dea436d3e73780dfdb6c1ecf9958baa52960e8baee30e73.json +24 -0
- data/spec/bitcoin/fixtures/rawtx-de35d060663750b3975b7997bde7fb76307cec5b270d12fcd9c4ad98b279c28c.json +23 -0
- data/spec/bitcoin/fixtures/rawtx-f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-a220adf1902c46a39db25a24bc4178b6a88440f977a7e2cabfdd8b5c1dd35cfb.json +27 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-e232e0055dbdca88bbaa79458683195a0b7c17c5b6c524a8d146721d4d4d652f.bin +0 -0
- data/spec/bitcoin/fixtures/rawtx-testnet-e232e0055dbdca88bbaa79458683195a0b7c17c5b6c524a8d146721d4d4d652f.json +41 -0
- data/spec/bitcoin/fixtures/reorg/blk_0_to_4.dat +0 -0
- data/spec/bitcoin/fixtures/reorg/blk_3A.dat +0 -0
- data/spec/bitcoin/fixtures/reorg/blk_4A.dat +0 -0
- data/spec/bitcoin/fixtures/reorg/blk_5A.dat +0 -0
- data/spec/bitcoin/fixtures/testnet/block_0.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_1.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_2.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_3.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_4.bin +0 -0
- data/spec/bitcoin/fixtures/testnet/block_5.bin +0 -0
- data/spec/bitcoin/fixtures/txdp-1.txt +32 -0
- data/spec/bitcoin/fixtures/txdp-2-signed.txt +19 -0
- data/spec/bitcoin/fixtures/txdp-2-unsigned.txt +14 -0
- data/spec/bitcoin/key_spec.rb +123 -0
- data/spec/bitcoin/network_spec.rb +48 -0
- data/spec/bitcoin/protocol/addr_spec.rb +68 -0
- data/spec/bitcoin/protocol/alert_spec.rb +20 -0
- data/spec/bitcoin/protocol/block_spec.rb +101 -0
- data/spec/bitcoin/protocol/inv_spec.rb +124 -0
- data/spec/bitcoin/protocol/ping_spec.rb +49 -0
- data/spec/bitcoin/protocol/tx_spec.rb +226 -0
- data/spec/bitcoin/protocol/version_spec.rb +77 -0
- data/spec/bitcoin/reorg_spec.rb +129 -0
- data/spec/bitcoin/script/opcodes_spec.rb +417 -0
- data/spec/bitcoin/script/script_spec.rb +246 -0
- data/spec/bitcoin/spec_helper.rb +36 -0
- data/spec/bitcoin/storage_spec.rb +229 -0
- data/spec/bitcoin/wallet/coinselector_spec.rb +35 -0
- data/spec/bitcoin/wallet/keygenerator_spec.rb +64 -0
- data/spec/bitcoin/wallet/keystore_spec.rb +188 -0
- data/spec/bitcoin/wallet/txdp_spec.rb +74 -0
- data/spec/bitcoin/wallet/wallet_spec.rb +207 -0
- metadata +295 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# autoload when you need to re-generate a public_key from only its private_key.
|
|
2
|
+
# ported from: https://github.com/sipa/bitcoin/blob/2d40fe4da9ea82af4b652b691a4185431d6e47a8/key.h
|
|
3
|
+
|
|
4
|
+
Bitcoin.require_dependency :ffi, exit: false, message:
|
|
5
|
+
"Skipping FFI needed for OpenSSL_EC.regenerate_key."
|
|
6
|
+
|
|
7
|
+
module Bitcoin
|
|
8
|
+
module OpenSSL_EC
|
|
9
|
+
extend FFI::Library
|
|
10
|
+
ffi_lib 'ssl'
|
|
11
|
+
|
|
12
|
+
NID_secp256k1 = 714
|
|
13
|
+
|
|
14
|
+
attach_function :SSL_library_init, [], :int
|
|
15
|
+
attach_function :ERR_load_crypto_strings, [], :void
|
|
16
|
+
attach_function :SSL_load_error_strings, [], :void
|
|
17
|
+
attach_function :RAND_poll, [], :int
|
|
18
|
+
|
|
19
|
+
#attach_function :BN_bin2bn, [:string, :int, :pointer], :pointer
|
|
20
|
+
attach_function :BN_bin2bn, [:pointer, :int, :pointer], :pointer
|
|
21
|
+
attach_function :EC_KEY_new_by_curve_name, [:int], :pointer
|
|
22
|
+
attach_function :EC_KEY_get0_group, [:pointer], :pointer
|
|
23
|
+
attach_function :BN_new, [], :pointer
|
|
24
|
+
attach_function :BN_CTX_new, [], :pointer
|
|
25
|
+
attach_function :EC_GROUP_get_order, [:pointer, :pointer, :pointer], :int
|
|
26
|
+
attach_function :EC_POINT_new, [:pointer], :pointer
|
|
27
|
+
attach_function :EC_POINT_mul, [:pointer, :pointer, :pointer, :pointer, :pointer, :pointer], :int
|
|
28
|
+
attach_function :EC_KEY_set_private_key, [:pointer, :pointer], :int
|
|
29
|
+
attach_function :EC_KEY_set_public_key, [:pointer, :pointer], :int
|
|
30
|
+
attach_function :BN_free, [:pointer], :int
|
|
31
|
+
attach_function :EC_POINT_free, [:pointer], :int
|
|
32
|
+
attach_function :BN_CTX_free, [:pointer], :int
|
|
33
|
+
attach_function :EC_KEY_free, [:pointer], :int
|
|
34
|
+
attach_function :i2o_ECPublicKey, [:pointer, :pointer], :uint
|
|
35
|
+
attach_function :i2d_ECPrivateKey, [:pointer, :pointer], :int
|
|
36
|
+
attach_function :d2i_ECPrivateKey, [:pointer, :pointer, :long], :pointer
|
|
37
|
+
attach_function :EC_KEY_get0_private_key, [:pointer], :pointer
|
|
38
|
+
attach_function :BN_bn2bin, [:pointer, :pointer], :void
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# resolve public from private key, using ffi and libssl.so
|
|
42
|
+
# example:
|
|
43
|
+
# keypair = Bitcoin.generate_key; Bitcoin::OpenSSL_EC.regenerate_key(keypair.first) == keypair
|
|
44
|
+
def self.regenerate_key(private_key)
|
|
45
|
+
private_key = [private_key].pack("H*") if private_key.bytesize >= (32*2)
|
|
46
|
+
private_key_hex = private_key.unpack("H*")[0]
|
|
47
|
+
|
|
48
|
+
#private_key = FFI::MemoryPointer.new(:uint8, private_key.bytesize)
|
|
49
|
+
# .put_bytes(0, private_key, 0, private_key.bytesize)
|
|
50
|
+
private_key = FFI::MemoryPointer.from_string(private_key)
|
|
51
|
+
|
|
52
|
+
init_ffi_ssl
|
|
53
|
+
eckey = EC_KEY_new_by_curve_name(NID_secp256k1)
|
|
54
|
+
#priv_key = BN_bin2bn(private_key, private_key.size, BN_new())
|
|
55
|
+
priv_key = BN_bin2bn(private_key, private_key.size-1, BN_new())
|
|
56
|
+
|
|
57
|
+
group, order, ctx = EC_KEY_get0_group(eckey), BN_new(), BN_CTX_new()
|
|
58
|
+
EC_GROUP_get_order(group, order, ctx)
|
|
59
|
+
|
|
60
|
+
pub_key = EC_POINT_new(group)
|
|
61
|
+
EC_POINT_mul(group, pub_key, priv_key, nil, nil, ctx)
|
|
62
|
+
EC_KEY_set_private_key(eckey, priv_key)
|
|
63
|
+
EC_KEY_set_public_key(eckey, pub_key)
|
|
64
|
+
|
|
65
|
+
BN_free(order)
|
|
66
|
+
BN_CTX_free(ctx)
|
|
67
|
+
EC_POINT_free(pub_key)
|
|
68
|
+
BN_free(priv_key)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
length = i2d_ECPrivateKey(eckey, nil)
|
|
72
|
+
ptr = FFI::MemoryPointer.new(:pointer)
|
|
73
|
+
priv_hex = if i2d_ECPrivateKey(eckey, ptr) == length
|
|
74
|
+
size = ptr.read_pointer.get_array_of_uint8(8, 1)[0]
|
|
75
|
+
ptr.read_pointer.get_array_of_uint8(9, size).pack("C*").rjust(32, "\x00").unpack("H*")[0]
|
|
76
|
+
#der_to_private_key( ptr.read_pointer.read_string(length).unpack("H*")[0] )
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if priv_hex != private_key_hex
|
|
80
|
+
raise "regenerated wrong private_key, raise here before generating a faulty public_key too!"
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
length = i2o_ECPublicKey(eckey, nil)
|
|
85
|
+
ptr = FFI::MemoryPointer.new(:pointer)
|
|
86
|
+
pub_hex = if i2o_ECPublicKey(eckey, ptr) == length
|
|
87
|
+
ptr.read_pointer.read_string(length).unpack("H*")[0]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
EC_KEY_free(eckey)
|
|
91
|
+
|
|
92
|
+
[ priv_hex, pub_hex ]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# extract private key from uncompressed DER format
|
|
96
|
+
def self.der_to_private_key(der_hex)
|
|
97
|
+
init_ffi_ssl
|
|
98
|
+
#k = EC_KEY_new_by_curve_name(NID_secp256k1)
|
|
99
|
+
#kp = FFI::MemoryPointer.new(:pointer).put_pointer(0, eckey)
|
|
100
|
+
|
|
101
|
+
buf = FFI::MemoryPointer.from_string([der_hex].pack("H*"))
|
|
102
|
+
ptr = FFI::MemoryPointer.new(:pointer).put_pointer(0, buf)
|
|
103
|
+
|
|
104
|
+
#ec_key = d2i_ECPrivateKey(kp, ptr, buf.size-1)
|
|
105
|
+
ec_key = d2i_ECPrivateKey(nil, ptr, buf.size-1)
|
|
106
|
+
return nil if ec_key.null?
|
|
107
|
+
bn = EC_KEY_get0_private_key(ec_key)
|
|
108
|
+
BN_bn2bin(bn, buf)
|
|
109
|
+
buf.read_string(32).unpack("H*")[0]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def self.init_ffi_ssl
|
|
113
|
+
return if @ssl_loaded
|
|
114
|
+
SSL_library_init()
|
|
115
|
+
ERR_load_crypto_strings()
|
|
116
|
+
SSL_load_error_strings()
|
|
117
|
+
RAND_poll()
|
|
118
|
+
@ssl_loaded = true
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Bitcoin::Gui
|
|
2
|
+
class AddrView < TreeView
|
|
3
|
+
|
|
4
|
+
def initialize gui
|
|
5
|
+
super(gui, :addr_view, [
|
|
6
|
+
[GObject::TYPE_STRING, "Address", :format_address_col],
|
|
7
|
+
[GObject::TYPE_STRING],
|
|
8
|
+
[GObject::TYPE_STRING, "Balance", :format_value_col],
|
|
9
|
+
[GObject::TYPE_BOOLEAN, "Mine?"]])
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def update addrs
|
|
13
|
+
EM.defer do
|
|
14
|
+
@model.clear
|
|
15
|
+
addrs.each do |addr|
|
|
16
|
+
row = @model.append(nil)
|
|
17
|
+
@model.set_value(row, 0, addr[:addr])
|
|
18
|
+
@model.set_value(row, 1, addr[:label] || "")
|
|
19
|
+
@model.set_value(row, 3, !!addr[:mine])
|
|
20
|
+
balance = 0
|
|
21
|
+
unconfirmed = @gui.check_unconfirmed.active
|
|
22
|
+
@gui.storage.get_txouts_for_address(addr[:addr]).each do |txout|
|
|
23
|
+
next if !unconfirmed && !txout.get_tx.get_block
|
|
24
|
+
tx_row = @model.append(row)
|
|
25
|
+
@model.set_value(tx_row, 0, txout.get_tx.hash)
|
|
26
|
+
@model.set_value(tx_row, 2, txout.value.to_s)
|
|
27
|
+
balance += txout.value
|
|
28
|
+
if txin = txout.get_next_in
|
|
29
|
+
tx_row = @model.append(row)
|
|
30
|
+
@model.set_value(tx_row, 0, txin.get_tx.hash)
|
|
31
|
+
@model.set_value(tx_row, 2, (0 - txout.value).to_s)
|
|
32
|
+
balance -= txout.value
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
@model.set_value(row, 2, balance.to_s)
|
|
36
|
+
end
|
|
37
|
+
@view.set_model @model
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
Binary file
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
12
|
+
width="744.09448819"
|
|
13
|
+
height="1052.3622047"
|
|
14
|
+
id="svg2"
|
|
15
|
+
version="1.1"
|
|
16
|
+
inkscape:version="0.48.3.1 r9886"
|
|
17
|
+
sodipodi:docname="bitcoin-ruby.svg">
|
|
18
|
+
<defs
|
|
19
|
+
id="defs4" />
|
|
20
|
+
<sodipodi:namedview
|
|
21
|
+
id="base"
|
|
22
|
+
pagecolor="#ffffff"
|
|
23
|
+
bordercolor="#666666"
|
|
24
|
+
borderopacity="1.0"
|
|
25
|
+
inkscape:pageopacity="0.0"
|
|
26
|
+
inkscape:pageshadow="2"
|
|
27
|
+
inkscape:zoom="0.35"
|
|
28
|
+
inkscape:cx="-129.28571"
|
|
29
|
+
inkscape:cy="520"
|
|
30
|
+
inkscape:document-units="px"
|
|
31
|
+
inkscape:current-layer="layer1"
|
|
32
|
+
showgrid="false"
|
|
33
|
+
inkscape:window-width="1596"
|
|
34
|
+
inkscape:window-height="1180"
|
|
35
|
+
inkscape:window-x="2"
|
|
36
|
+
inkscape:window-y="18"
|
|
37
|
+
inkscape:window-maximized="0" />
|
|
38
|
+
<metadata
|
|
39
|
+
id="metadata7">
|
|
40
|
+
<rdf:RDF>
|
|
41
|
+
<cc:Work
|
|
42
|
+
rdf:about="">
|
|
43
|
+
<dc:format>image/svg+xml</dc:format>
|
|
44
|
+
<dc:type
|
|
45
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
46
|
+
<dc:title></dc:title>
|
|
47
|
+
</cc:Work>
|
|
48
|
+
</rdf:RDF>
|
|
49
|
+
</metadata>
|
|
50
|
+
<g
|
|
51
|
+
inkscape:label="Layer 1"
|
|
52
|
+
inkscape:groupmode="layer"
|
|
53
|
+
id="layer1">
|
|
54
|
+
<rect
|
|
55
|
+
style="fill:#8c0000;fill-opacity:1;stroke:#ffffff;stroke-width:0.75155282;stroke-opacity:1"
|
|
56
|
+
id="rect2987"
|
|
57
|
+
width="120.24844"
|
|
58
|
+
height="120.24844"
|
|
59
|
+
x="268.4472"
|
|
60
|
+
y="200.80939"
|
|
61
|
+
inkscape:export-filename="/home/mhanne/work/bitcoin-ruby/lib/bitcoin/gui/bitcoin-ruby.png"
|
|
62
|
+
inkscape:export-xdpi="74.380165"
|
|
63
|
+
inkscape:export-ydpi="74.380165" />
|
|
64
|
+
<text
|
|
65
|
+
xml:space="preserve"
|
|
66
|
+
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
|
67
|
+
x="285.71429"
|
|
68
|
+
y="303.79077"
|
|
69
|
+
id="text2989"
|
|
70
|
+
sodipodi:linespacing="125%"
|
|
71
|
+
inkscape:export-filename="/home/mhanne/work/bitcoin-ruby/lib/bitcoin/gui/bitcoin-ruby.png"
|
|
72
|
+
inkscape:export-xdpi="74.380165"
|
|
73
|
+
inkscape:export-ydpi="74.380165"><tspan
|
|
74
|
+
sodipodi:role="line"
|
|
75
|
+
id="tspan2991"
|
|
76
|
+
x="285.71429"
|
|
77
|
+
y="303.79077"
|
|
78
|
+
style="font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;font-family:FreeMono;-inkscape-font-specification:FreeMono Bold">B</tspan></text>
|
|
79
|
+
</g>
|
|
80
|
+
</svg>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Bitcoin::Gui
|
|
2
|
+
class ConnView < TreeView
|
|
3
|
+
def initialize gui
|
|
4
|
+
super(gui, :conn_view, [
|
|
5
|
+
[GObject::TYPE_STRING, "Host"],
|
|
6
|
+
[GObject::TYPE_INT, "Port"],
|
|
7
|
+
[GObject::TYPE_STRING, "State"],
|
|
8
|
+
[GObject::TYPE_INT, "Version", :format_version_col],
|
|
9
|
+
[GObject::TYPE_INT, "Block"],
|
|
10
|
+
[GObject::TYPE_INT, "Uptime", :format_uptime_col],
|
|
11
|
+
[GObject::TYPE_STRING, "User Agent"]])
|
|
12
|
+
@view.set_model @model
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def connected data
|
|
16
|
+
row = @model.append(nil)
|
|
17
|
+
data.each_with_index do |pair, i|
|
|
18
|
+
@model.set_value(row, i, pair[1] || "")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def disconnected data
|
|
23
|
+
valid, i = @model.get_iter_first
|
|
24
|
+
while valid
|
|
25
|
+
host = @model.get_value(i, 0).get_string
|
|
26
|
+
port = @model.get_value(i, 1).get_int
|
|
27
|
+
if host == data[0] && port == data[1]
|
|
28
|
+
@model.remove(i)
|
|
29
|
+
break
|
|
30
|
+
end
|
|
31
|
+
valid = @model.iter_next(i.to_ptr)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
module Bitcoin::Gui
|
|
2
|
+
|
|
3
|
+
class Bitcoin::Network::CommandClient
|
|
4
|
+
def gui &block
|
|
5
|
+
EM.next_tick do
|
|
6
|
+
@args[0].instance_eval &block
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Connection
|
|
12
|
+
|
|
13
|
+
def initialize host, port, gui
|
|
14
|
+
@gui = gui
|
|
15
|
+
@gui.node = Bitcoin::Network::CommandClient.connect(host, port, gui) do
|
|
16
|
+
|
|
17
|
+
on_connected do
|
|
18
|
+
request :info
|
|
19
|
+
request :monitor, "block", "connection"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
on_info do |info|
|
|
23
|
+
text = "connections: #{info['connections']} | " +
|
|
24
|
+
"addrs: #{info['addrs']} | uptime: #{info['uptime']}"
|
|
25
|
+
gui { status_network.push 0, text }
|
|
26
|
+
EM::defer { sleep(1) && request(:info) }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
on_block do |block, depth|
|
|
30
|
+
gui { status_store.push 0, "Blocks: #{depth}" }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
on_connection do |state, data|
|
|
34
|
+
if state == "connected"
|
|
35
|
+
gui.conn_view.connected(data)
|
|
36
|
+
elsif state == "disconnected"
|
|
37
|
+
gui.conn_view.disconnected(data)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
gui do
|
|
41
|
+
size = 0
|
|
42
|
+
v, i = conn_view.model.get_iter_first
|
|
43
|
+
while v
|
|
44
|
+
size += 1
|
|
45
|
+
v = conn_view.model.iter_next(i.to_ptr)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
p = notebook.get_nth_page(2)
|
|
49
|
+
l = Gtk::Label.new("Connections (#{size})")
|
|
50
|
+
notebook.set_tab_label(p, l)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
on_disconnected do
|
|
55
|
+
if @connection_attempts == 4
|
|
56
|
+
gui do
|
|
57
|
+
message(:warning, "Node not available", "The bitcoin node is not running " +
|
|
58
|
+
"or not reachable.\nYou can use the wallet to handle keys but you won't " +
|
|
59
|
+
"be able to send/receive transactions.", [:ok])
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
gui.status_network.push 0, "Offline"
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "monitor"
|
|
2
|
+
|
|
3
|
+
module Gtk
|
|
4
|
+
GTK_PENDING_BLOCKS = []
|
|
5
|
+
GTK_PENDING_BLOCKS_LOCK = Monitor.new
|
|
6
|
+
|
|
7
|
+
def Gtk.queue &block
|
|
8
|
+
GTK_PENDING_BLOCKS_LOCK.synchronize do
|
|
9
|
+
GTK_PENDING_BLOCKS << block
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def Gtk.main_iteration_with_queue
|
|
14
|
+
GTK_PENDING_BLOCKS_LOCK.synchronize do
|
|
15
|
+
for block in GTK_PENDING_BLOCKS
|
|
16
|
+
block.call
|
|
17
|
+
end
|
|
18
|
+
GTK_PENDING_BLOCKS.clear
|
|
19
|
+
end
|
|
20
|
+
Gtk.main_iteration while Gtk.events_pending
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
module EM
|
|
25
|
+
def self.gtk_main
|
|
26
|
+
EM.add_periodic_timer(0.001) { Gtk.main_iteration_with_queue }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,1643 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<interface>
|
|
3
|
+
<!-- interface-requires gtk+ 3.0 -->
|
|
4
|
+
<object class="GtkAboutDialog" id="about_dialog">
|
|
5
|
+
<property name="can_focus">False</property>
|
|
6
|
+
<property name="border_width">5</property>
|
|
7
|
+
<property name="title" translatable="yes">About</property>
|
|
8
|
+
<property name="type_hint">dialog</property>
|
|
9
|
+
<property name="program_name">Bitcoin-Ruby GUI</property>
|
|
10
|
+
<property name="version">0.0.1</property>
|
|
11
|
+
<property name="copyright" translatable="yes">Copyright (c) 2011 Julian Langschaedel <meta.rb@gmail.com>
|
|
12
|
+
Copyright (c) 2012 Marius Hanne <marius.hanne@sourceagency.org></property>
|
|
13
|
+
<property name="comments" translatable="yes">a ruby library for interacting with the bitcoin protocol/network</property>
|
|
14
|
+
<property name="website">http://mhanne.github.com/bitcoin-ruby/</property>
|
|
15
|
+
<property name="license" translatable="yes">Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
16
|
+
of this software and associated documentation files (the "Software"), to
|
|
17
|
+
deal in the Software without restriction, including without limitation the
|
|
18
|
+
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
19
|
+
sell copies of the Software, and to permit persons to whom the Software is
|
|
20
|
+
furnished to do so, subject to the following conditions:
|
|
21
|
+
|
|
22
|
+
The above copyright notice and this permission notice shall be included in
|
|
23
|
+
all copies or substantial portions of the Software.
|
|
24
|
+
|
|
25
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
26
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
27
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
28
|
+
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
29
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
30
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</property>
|
|
31
|
+
<property name="authors">Julian Langschaedel
|
|
32
|
+
Marius Hanne</property>
|
|
33
|
+
<property name="logo">bitcoin-ruby.png</property>
|
|
34
|
+
<property name="wrap_license">True</property>
|
|
35
|
+
<property name="license_type">artistic</property>
|
|
36
|
+
<signal name="response" handler="on_about_close" swapped="no"/>
|
|
37
|
+
<child internal-child="vbox">
|
|
38
|
+
<object class="GtkBox" id="aboutdialog-vbox1">
|
|
39
|
+
<property name="can_focus">False</property>
|
|
40
|
+
<property name="orientation">vertical</property>
|
|
41
|
+
<property name="spacing">2</property>
|
|
42
|
+
<child internal-child="action_area">
|
|
43
|
+
<object class="GtkButtonBox" id="aboutdialog-action_area1">
|
|
44
|
+
<property name="can_focus">False</property>
|
|
45
|
+
<property name="layout_style">end</property>
|
|
46
|
+
<signal name="add" handler="on_about_close" swapped="no"/>
|
|
47
|
+
<signal name="remove" handler="on_about_close" swapped="no"/>
|
|
48
|
+
</object>
|
|
49
|
+
<packing>
|
|
50
|
+
<property name="expand">False</property>
|
|
51
|
+
<property name="fill">True</property>
|
|
52
|
+
<property name="pack_type">end</property>
|
|
53
|
+
<property name="position">0</property>
|
|
54
|
+
</packing>
|
|
55
|
+
</child>
|
|
56
|
+
<child>
|
|
57
|
+
<placeholder/>
|
|
58
|
+
</child>
|
|
59
|
+
</object>
|
|
60
|
+
</child>
|
|
61
|
+
</object>
|
|
62
|
+
<object class="GtkAccelGroup" id="accelgroup1">
|
|
63
|
+
<signal name="accel-activate" handler="on_accel_activate" swapped="no"/>
|
|
64
|
+
</object>
|
|
65
|
+
<object class="GtkAction" id="action_exit">
|
|
66
|
+
<property name="label" translatable="yes">aaa</property>
|
|
67
|
+
<signal name="activate" handler="on_exit" swapped="no"/>
|
|
68
|
+
</object>
|
|
69
|
+
<object class="GtkTreeStore" id="addr_store">
|
|
70
|
+
<columns>
|
|
71
|
+
<!-- column-name Address -->
|
|
72
|
+
<column type="gchararray"/>
|
|
73
|
+
<!-- column-name column1 -->
|
|
74
|
+
<column type="gchararray"/>
|
|
75
|
+
<!-- column-name Balance -->
|
|
76
|
+
<column type="gchararray"/>
|
|
77
|
+
</columns>
|
|
78
|
+
</object>
|
|
79
|
+
<object class="GtkImage" id="image_new_addr">
|
|
80
|
+
<property name="visible">True</property>
|
|
81
|
+
<property name="can_focus">False</property>
|
|
82
|
+
<property name="stock">gtk-add</property>
|
|
83
|
+
</object>
|
|
84
|
+
<object class="GtkImage" id="image_new_tx">
|
|
85
|
+
<property name="visible">True</property>
|
|
86
|
+
<property name="can_focus">False</property>
|
|
87
|
+
<property name="stock">gtk-go-forward</property>
|
|
88
|
+
</object>
|
|
89
|
+
<object class="GtkListStore" id="liststore1"/>
|
|
90
|
+
<object class="GtkWindow" id="main_window">
|
|
91
|
+
<property name="can_focus">False</property>
|
|
92
|
+
<property name="title" translatable="yes">Bitcoin-Ruby GUI</property>
|
|
93
|
+
<accel-groups>
|
|
94
|
+
<group name="accelgroup1"/>
|
|
95
|
+
</accel-groups>
|
|
96
|
+
<signal name="delete-event" handler="on_exit" swapped="no"/>
|
|
97
|
+
<child>
|
|
98
|
+
<object class="GtkBox" id="box1">
|
|
99
|
+
<property name="visible">True</property>
|
|
100
|
+
<property name="can_focus">False</property>
|
|
101
|
+
<property name="orientation">vertical</property>
|
|
102
|
+
<child>
|
|
103
|
+
<object class="GtkMenuBar" id="menubar1">
|
|
104
|
+
<property name="visible">True</property>
|
|
105
|
+
<property name="can_focus">False</property>
|
|
106
|
+
<child>
|
|
107
|
+
<object class="GtkMenuItem" id="menuitem1">
|
|
108
|
+
<property name="use_action_appearance">False</property>
|
|
109
|
+
<property name="visible">True</property>
|
|
110
|
+
<property name="can_focus">False</property>
|
|
111
|
+
<property name="label" translatable="yes">_File</property>
|
|
112
|
+
<property name="use_underline">True</property>
|
|
113
|
+
<child type="submenu">
|
|
114
|
+
<object class="GtkMenu" id="menu1">
|
|
115
|
+
<property name="visible">True</property>
|
|
116
|
+
<property name="can_focus">False</property>
|
|
117
|
+
<child>
|
|
118
|
+
<object class="GtkImageMenuItem" id="menu_file_new">
|
|
119
|
+
<property name="label">gtk-new</property>
|
|
120
|
+
<property name="use_action_appearance">False</property>
|
|
121
|
+
<property name="visible">True</property>
|
|
122
|
+
<property name="can_focus">False</property>
|
|
123
|
+
<property name="use_underline">True</property>
|
|
124
|
+
<property name="use_stock">True</property>
|
|
125
|
+
<signal name="activate" handler="on_new_wallet" swapped="no"/>
|
|
126
|
+
</object>
|
|
127
|
+
</child>
|
|
128
|
+
<child>
|
|
129
|
+
<object class="GtkImageMenuItem" id="menu_file_open">
|
|
130
|
+
<property name="label">gtk-open</property>
|
|
131
|
+
<property name="use_action_appearance">False</property>
|
|
132
|
+
<property name="visible">True</property>
|
|
133
|
+
<property name="can_focus">False</property>
|
|
134
|
+
<property name="use_underline">True</property>
|
|
135
|
+
<property name="use_stock">True</property>
|
|
136
|
+
<signal name="activate" handler="on_open_wallet" swapped="no"/>
|
|
137
|
+
</object>
|
|
138
|
+
</child>
|
|
139
|
+
<child>
|
|
140
|
+
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
|
|
141
|
+
<property name="use_action_appearance">False</property>
|
|
142
|
+
<property name="visible">True</property>
|
|
143
|
+
<property name="can_focus">False</property>
|
|
144
|
+
</object>
|
|
145
|
+
</child>
|
|
146
|
+
<child>
|
|
147
|
+
<object class="GtkImageMenuItem" id="menu_file_quit">
|
|
148
|
+
<property name="label">gtk-quit</property>
|
|
149
|
+
<property name="use_action_appearance">False</property>
|
|
150
|
+
<property name="related_action">action_exit</property>
|
|
151
|
+
<property name="visible">True</property>
|
|
152
|
+
<property name="can_focus">False</property>
|
|
153
|
+
<property name="use_underline">True</property>
|
|
154
|
+
<property name="use_stock">True</property>
|
|
155
|
+
<signal name="activate" handler="on_exit" swapped="no"/>
|
|
156
|
+
</object>
|
|
157
|
+
</child>
|
|
158
|
+
</object>
|
|
159
|
+
</child>
|
|
160
|
+
</object>
|
|
161
|
+
</child>
|
|
162
|
+
<child>
|
|
163
|
+
<object class="GtkMenuItem" id="menuitem2">
|
|
164
|
+
<property name="use_action_appearance">False</property>
|
|
165
|
+
<property name="visible">True</property>
|
|
166
|
+
<property name="can_focus">False</property>
|
|
167
|
+
<property name="label" translatable="yes">_Edit</property>
|
|
168
|
+
<property name="use_underline">True</property>
|
|
169
|
+
<child type="submenu">
|
|
170
|
+
<object class="GtkMenu" id="menu2">
|
|
171
|
+
<property name="visible">True</property>
|
|
172
|
+
<property name="can_focus">False</property>
|
|
173
|
+
<child>
|
|
174
|
+
<object class="GtkImageMenuItem" id="menu_edit_copy">
|
|
175
|
+
<property name="label">gtk-copy</property>
|
|
176
|
+
<property name="use_action_appearance">False</property>
|
|
177
|
+
<property name="visible">True</property>
|
|
178
|
+
<property name="can_focus">False</property>
|
|
179
|
+
<property name="use_underline">True</property>
|
|
180
|
+
<property name="use_stock">True</property>
|
|
181
|
+
<signal name="activate" handler="on_copy_addr" swapped="no"/>
|
|
182
|
+
</object>
|
|
183
|
+
</child>
|
|
184
|
+
<child>
|
|
185
|
+
<object class="GtkImageMenuItem" id="menu_edit_paste">
|
|
186
|
+
<property name="label">gtk-paste</property>
|
|
187
|
+
<property name="use_action_appearance">False</property>
|
|
188
|
+
<property name="visible">True</property>
|
|
189
|
+
<property name="can_focus">False</property>
|
|
190
|
+
<property name="use_underline">True</property>
|
|
191
|
+
<property name="use_stock">True</property>
|
|
192
|
+
<signal name="activate" handler="on_paste_addr" swapped="no"/>
|
|
193
|
+
</object>
|
|
194
|
+
</child>
|
|
195
|
+
<child>
|
|
196
|
+
<object class="GtkSeparatorMenuItem" id="separatormenuitem2">
|
|
197
|
+
<property name="use_action_appearance">False</property>
|
|
198
|
+
<property name="visible">True</property>
|
|
199
|
+
<property name="can_focus">False</property>
|
|
200
|
+
</object>
|
|
201
|
+
</child>
|
|
202
|
+
<child>
|
|
203
|
+
<object class="GtkImageMenuItem" id="menu_edit_preferences">
|
|
204
|
+
<property name="label">gtk-preferences</property>
|
|
205
|
+
<property name="use_action_appearance">False</property>
|
|
206
|
+
<property name="visible">True</property>
|
|
207
|
+
<property name="can_focus">False</property>
|
|
208
|
+
<property name="use_underline">True</property>
|
|
209
|
+
<property name="use_stock">True</property>
|
|
210
|
+
<signal name="activate" handler="on_preferences" swapped="no"/>
|
|
211
|
+
</object>
|
|
212
|
+
</child>
|
|
213
|
+
</object>
|
|
214
|
+
</child>
|
|
215
|
+
</object>
|
|
216
|
+
</child>
|
|
217
|
+
<child>
|
|
218
|
+
<object class="GtkMenuItem" id="menuitem3">
|
|
219
|
+
<property name="use_action_appearance">False</property>
|
|
220
|
+
<property name="visible">True</property>
|
|
221
|
+
<property name="can_focus">False</property>
|
|
222
|
+
<property name="label" translatable="yes">_View</property>
|
|
223
|
+
<property name="use_underline">True</property>
|
|
224
|
+
<child type="submenu">
|
|
225
|
+
<object class="GtkMenu" id="menu4">
|
|
226
|
+
<property name="visible">True</property>
|
|
227
|
+
<property name="can_focus">False</property>
|
|
228
|
+
<child>
|
|
229
|
+
<object class="GtkCheckMenuItem" id="check_unconfirmed">
|
|
230
|
+
<property name="use_action_appearance">False</property>
|
|
231
|
+
<property name="visible">True</property>
|
|
232
|
+
<property name="can_focus">False</property>
|
|
233
|
+
<property name="tooltip_text" translatable="yes">Display transactions that are not yet confirmed and use unconfirmed values to calculate balances</property>
|
|
234
|
+
<property name="label" translatable="yes">Display Unconfirmed</property>
|
|
235
|
+
<property name="use_underline">True</property>
|
|
236
|
+
<signal name="toggled" handler="on_check_unconfirmed_toggled" swapped="no"/>
|
|
237
|
+
</object>
|
|
238
|
+
</child>
|
|
239
|
+
</object>
|
|
240
|
+
</child>
|
|
241
|
+
</object>
|
|
242
|
+
</child>
|
|
243
|
+
<child>
|
|
244
|
+
<object class="GtkMenuItem" id="menuitem4">
|
|
245
|
+
<property name="use_action_appearance">False</property>
|
|
246
|
+
<property name="visible">True</property>
|
|
247
|
+
<property name="can_focus">False</property>
|
|
248
|
+
<property name="label" translatable="yes">_Help</property>
|
|
249
|
+
<property name="use_underline">True</property>
|
|
250
|
+
<child type="submenu">
|
|
251
|
+
<object class="GtkMenu" id="menu3">
|
|
252
|
+
<property name="visible">True</property>
|
|
253
|
+
<property name="can_focus">False</property>
|
|
254
|
+
<child>
|
|
255
|
+
<object class="GtkImageMenuItem" id="menu_help_about">
|
|
256
|
+
<property name="label">gtk-about</property>
|
|
257
|
+
<property name="use_action_appearance">False</property>
|
|
258
|
+
<property name="visible">True</property>
|
|
259
|
+
<property name="can_focus">False</property>
|
|
260
|
+
<property name="use_underline">True</property>
|
|
261
|
+
<property name="use_stock">True</property>
|
|
262
|
+
<property name="accel_group">accelgroup1</property>
|
|
263
|
+
<signal name="activate" handler="on_about" swapped="no"/>
|
|
264
|
+
</object>
|
|
265
|
+
</child>
|
|
266
|
+
</object>
|
|
267
|
+
</child>
|
|
268
|
+
</object>
|
|
269
|
+
</child>
|
|
270
|
+
</object>
|
|
271
|
+
<packing>
|
|
272
|
+
<property name="expand">False</property>
|
|
273
|
+
<property name="fill">True</property>
|
|
274
|
+
<property name="position">0</property>
|
|
275
|
+
</packing>
|
|
276
|
+
</child>
|
|
277
|
+
<child>
|
|
278
|
+
<object class="GtkNotebook" id="notebook">
|
|
279
|
+
<property name="visible">True</property>
|
|
280
|
+
<property name="can_focus">True</property>
|
|
281
|
+
<child>
|
|
282
|
+
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
|
283
|
+
<property name="visible">True</property>
|
|
284
|
+
<property name="can_focus">True</property>
|
|
285
|
+
<property name="shadow_type">in</property>
|
|
286
|
+
<child>
|
|
287
|
+
<object class="GtkTreeView" id="addr_view">
|
|
288
|
+
<property name="visible">True</property>
|
|
289
|
+
<property name="can_focus">True</property>
|
|
290
|
+
<property name="model">addr_store</property>
|
|
291
|
+
<property name="enable_grid_lines">both</property>
|
|
292
|
+
<child internal-child="selection">
|
|
293
|
+
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
|
294
|
+
</child>
|
|
295
|
+
</object>
|
|
296
|
+
</child>
|
|
297
|
+
</object>
|
|
298
|
+
<packing>
|
|
299
|
+
<property name="tab_expand">True</property>
|
|
300
|
+
</packing>
|
|
301
|
+
</child>
|
|
302
|
+
<child type="tab">
|
|
303
|
+
<object class="GtkLabel" id="notebook_label_addresses">
|
|
304
|
+
<property name="visible">True</property>
|
|
305
|
+
<property name="can_focus">False</property>
|
|
306
|
+
<property name="label" translatable="yes">Addresses</property>
|
|
307
|
+
</object>
|
|
308
|
+
<packing>
|
|
309
|
+
<property name="tab_fill">False</property>
|
|
310
|
+
</packing>
|
|
311
|
+
</child>
|
|
312
|
+
<child>
|
|
313
|
+
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
|
314
|
+
<property name="visible">True</property>
|
|
315
|
+
<property name="can_focus">True</property>
|
|
316
|
+
<property name="shadow_type">in</property>
|
|
317
|
+
<child>
|
|
318
|
+
<object class="GtkTreeView" id="tx_view">
|
|
319
|
+
<property name="visible">True</property>
|
|
320
|
+
<property name="can_focus">True</property>
|
|
321
|
+
<child internal-child="selection">
|
|
322
|
+
<object class="GtkTreeSelection" id="treeview-selection2"/>
|
|
323
|
+
</child>
|
|
324
|
+
</object>
|
|
325
|
+
</child>
|
|
326
|
+
</object>
|
|
327
|
+
<packing>
|
|
328
|
+
<property name="position">1</property>
|
|
329
|
+
<property name="tab_expand">True</property>
|
|
330
|
+
</packing>
|
|
331
|
+
</child>
|
|
332
|
+
<child type="tab">
|
|
333
|
+
<object class="GtkLabel" id="notebook_label_transactions">
|
|
334
|
+
<property name="visible">True</property>
|
|
335
|
+
<property name="can_focus">False</property>
|
|
336
|
+
<property name="label" translatable="yes">Transactions</property>
|
|
337
|
+
</object>
|
|
338
|
+
<packing>
|
|
339
|
+
<property name="position">1</property>
|
|
340
|
+
<property name="tab_fill">False</property>
|
|
341
|
+
</packing>
|
|
342
|
+
</child>
|
|
343
|
+
<child>
|
|
344
|
+
<object class="GtkScrolledWindow" id="scrolledwindow3">
|
|
345
|
+
<property name="visible">True</property>
|
|
346
|
+
<property name="can_focus">True</property>
|
|
347
|
+
<property name="shadow_type">in</property>
|
|
348
|
+
<child>
|
|
349
|
+
<object class="GtkTreeView" id="conn_view">
|
|
350
|
+
<property name="visible">True</property>
|
|
351
|
+
<property name="can_focus">True</property>
|
|
352
|
+
<child internal-child="selection">
|
|
353
|
+
<object class="GtkTreeSelection" id="treeview-selection4"/>
|
|
354
|
+
</child>
|
|
355
|
+
</object>
|
|
356
|
+
</child>
|
|
357
|
+
</object>
|
|
358
|
+
<packing>
|
|
359
|
+
<property name="position">2</property>
|
|
360
|
+
<property name="tab_expand">True</property>
|
|
361
|
+
</packing>
|
|
362
|
+
</child>
|
|
363
|
+
<child type="tab">
|
|
364
|
+
<object class="GtkLabel" id="notebook_label_peers">
|
|
365
|
+
<property name="visible">True</property>
|
|
366
|
+
<property name="can_focus">False</property>
|
|
367
|
+
<property name="label" translatable="yes">Connections</property>
|
|
368
|
+
</object>
|
|
369
|
+
<packing>
|
|
370
|
+
<property name="position">2</property>
|
|
371
|
+
<property name="tab_fill">False</property>
|
|
372
|
+
</packing>
|
|
373
|
+
</child>
|
|
374
|
+
<child>
|
|
375
|
+
<placeholder/>
|
|
376
|
+
</child>
|
|
377
|
+
<child type="tab">
|
|
378
|
+
<placeholder/>
|
|
379
|
+
</child>
|
|
380
|
+
</object>
|
|
381
|
+
<packing>
|
|
382
|
+
<property name="expand">True</property>
|
|
383
|
+
<property name="fill">True</property>
|
|
384
|
+
<property name="position">1</property>
|
|
385
|
+
</packing>
|
|
386
|
+
</child>
|
|
387
|
+
<child>
|
|
388
|
+
<object class="GtkButtonBox" id="buttonbar">
|
|
389
|
+
<property name="visible">True</property>
|
|
390
|
+
<property name="can_focus">False</property>
|
|
391
|
+
<property name="homogeneous">True</property>
|
|
392
|
+
<property name="layout_style">start</property>
|
|
393
|
+
<child>
|
|
394
|
+
<object class="GtkButton" id="button_new_addr">
|
|
395
|
+
<property name="label" translatable="yes">New Address</property>
|
|
396
|
+
<property name="use_action_appearance">False</property>
|
|
397
|
+
<property name="visible">True</property>
|
|
398
|
+
<property name="can_focus">True</property>
|
|
399
|
+
<property name="receives_default">True</property>
|
|
400
|
+
<property name="use_action_appearance">False</property>
|
|
401
|
+
<property name="image">image_new_addr</property>
|
|
402
|
+
<signal name="clicked" handler="on_new_addr" swapped="no"/>
|
|
403
|
+
</object>
|
|
404
|
+
<packing>
|
|
405
|
+
<property name="expand">False</property>
|
|
406
|
+
<property name="fill">True</property>
|
|
407
|
+
<property name="position">0</property>
|
|
408
|
+
</packing>
|
|
409
|
+
</child>
|
|
410
|
+
<child>
|
|
411
|
+
<object class="GtkButton" id="button_new_tx">
|
|
412
|
+
<property name="label" translatable="yes">New Transaction</property>
|
|
413
|
+
<property name="use_action_appearance">False</property>
|
|
414
|
+
<property name="visible">True</property>
|
|
415
|
+
<property name="can_focus">True</property>
|
|
416
|
+
<property name="receives_default">True</property>
|
|
417
|
+
<property name="use_action_appearance">False</property>
|
|
418
|
+
<property name="image">image_new_tx</property>
|
|
419
|
+
<signal name="clicked" handler="on_new_tx" swapped="no"/>
|
|
420
|
+
</object>
|
|
421
|
+
<packing>
|
|
422
|
+
<property name="expand">False</property>
|
|
423
|
+
<property name="fill">True</property>
|
|
424
|
+
<property name="position">1</property>
|
|
425
|
+
</packing>
|
|
426
|
+
</child>
|
|
427
|
+
<child>
|
|
428
|
+
<placeholder/>
|
|
429
|
+
</child>
|
|
430
|
+
</object>
|
|
431
|
+
<packing>
|
|
432
|
+
<property name="expand">False</property>
|
|
433
|
+
<property name="fill">True</property>
|
|
434
|
+
<property name="position">2</property>
|
|
435
|
+
</packing>
|
|
436
|
+
</child>
|
|
437
|
+
<child>
|
|
438
|
+
<object class="GtkBox" id="box4">
|
|
439
|
+
<property name="visible">True</property>
|
|
440
|
+
<property name="can_focus">False</property>
|
|
441
|
+
<child>
|
|
442
|
+
<object class="GtkImage" id="image1">
|
|
443
|
+
<property name="visible">True</property>
|
|
444
|
+
<property name="can_focus">False</property>
|
|
445
|
+
<property name="stock">gtk-network</property>
|
|
446
|
+
</object>
|
|
447
|
+
<packing>
|
|
448
|
+
<property name="expand">False</property>
|
|
449
|
+
<property name="fill">True</property>
|
|
450
|
+
<property name="position">0</property>
|
|
451
|
+
</packing>
|
|
452
|
+
</child>
|
|
453
|
+
<child>
|
|
454
|
+
<object class="GtkStatusbar" id="status_network">
|
|
455
|
+
<property name="visible">True</property>
|
|
456
|
+
<property name="can_focus">False</property>
|
|
457
|
+
<property name="orientation">vertical</property>
|
|
458
|
+
<property name="spacing">2</property>
|
|
459
|
+
</object>
|
|
460
|
+
<packing>
|
|
461
|
+
<property name="expand">True</property>
|
|
462
|
+
<property name="fill">True</property>
|
|
463
|
+
<property name="padding">10</property>
|
|
464
|
+
<property name="position">1</property>
|
|
465
|
+
</packing>
|
|
466
|
+
</child>
|
|
467
|
+
<child>
|
|
468
|
+
<object class="GtkImage" id="image2">
|
|
469
|
+
<property name="visible">True</property>
|
|
470
|
+
<property name="can_focus">False</property>
|
|
471
|
+
<property name="stock">gtk-harddisk</property>
|
|
472
|
+
</object>
|
|
473
|
+
<packing>
|
|
474
|
+
<property name="expand">False</property>
|
|
475
|
+
<property name="fill">True</property>
|
|
476
|
+
<property name="position">2</property>
|
|
477
|
+
</packing>
|
|
478
|
+
</child>
|
|
479
|
+
<child>
|
|
480
|
+
<object class="GtkStatusbar" id="status_store">
|
|
481
|
+
<property name="visible">True</property>
|
|
482
|
+
<property name="can_focus">False</property>
|
|
483
|
+
<property name="orientation">vertical</property>
|
|
484
|
+
<property name="spacing">2</property>
|
|
485
|
+
</object>
|
|
486
|
+
<packing>
|
|
487
|
+
<property name="expand">True</property>
|
|
488
|
+
<property name="fill">True</property>
|
|
489
|
+
<property name="padding">10</property>
|
|
490
|
+
<property name="position">3</property>
|
|
491
|
+
</packing>
|
|
492
|
+
</child>
|
|
493
|
+
<child>
|
|
494
|
+
<object class="GtkImage" id="image3">
|
|
495
|
+
<property name="visible">True</property>
|
|
496
|
+
<property name="can_focus">False</property>
|
|
497
|
+
<property name="stock">gtk-dialog-authentication</property>
|
|
498
|
+
</object>
|
|
499
|
+
<packing>
|
|
500
|
+
<property name="expand">False</property>
|
|
501
|
+
<property name="fill">True</property>
|
|
502
|
+
<property name="position">4</property>
|
|
503
|
+
</packing>
|
|
504
|
+
</child>
|
|
505
|
+
<child>
|
|
506
|
+
<object class="GtkStatusbar" id="status_wallet">
|
|
507
|
+
<property name="visible">True</property>
|
|
508
|
+
<property name="can_focus">False</property>
|
|
509
|
+
<property name="orientation">vertical</property>
|
|
510
|
+
<property name="spacing">2</property>
|
|
511
|
+
</object>
|
|
512
|
+
<packing>
|
|
513
|
+
<property name="expand">True</property>
|
|
514
|
+
<property name="fill">True</property>
|
|
515
|
+
<property name="padding">10</property>
|
|
516
|
+
<property name="position">5</property>
|
|
517
|
+
</packing>
|
|
518
|
+
</child>
|
|
519
|
+
</object>
|
|
520
|
+
<packing>
|
|
521
|
+
<property name="expand">False</property>
|
|
522
|
+
<property name="fill">True</property>
|
|
523
|
+
<property name="position">3</property>
|
|
524
|
+
</packing>
|
|
525
|
+
</child>
|
|
526
|
+
</object>
|
|
527
|
+
</child>
|
|
528
|
+
</object>
|
|
529
|
+
<object class="GtkMessageDialog" id="message_dialog">
|
|
530
|
+
<property name="can_focus">False</property>
|
|
531
|
+
<property name="border_width">5</property>
|
|
532
|
+
<property name="window_position">mouse</property>
|
|
533
|
+
<property name="type_hint">dialog</property>
|
|
534
|
+
<property name="skip_taskbar_hint">True</property>
|
|
535
|
+
<property name="text" translatable="yes">aaa</property>
|
|
536
|
+
<property name="secondary_text" translatable="yes">aaaaa</property>
|
|
537
|
+
<child internal-child="vbox">
|
|
538
|
+
<object class="GtkBox" id="messagedialog-vbox1">
|
|
539
|
+
<property name="can_focus">False</property>
|
|
540
|
+
<property name="orientation">vertical</property>
|
|
541
|
+
<property name="spacing">2</property>
|
|
542
|
+
<child internal-child="action_area">
|
|
543
|
+
<object class="GtkButtonBox" id="messagedialog-action_area1">
|
|
544
|
+
<property name="can_focus">False</property>
|
|
545
|
+
<property name="layout_style">end</property>
|
|
546
|
+
<child>
|
|
547
|
+
<object class="GtkButton" id="message_dialog_button_no">
|
|
548
|
+
<property name="label">gtk-no</property>
|
|
549
|
+
<property name="use_action_appearance">False</property>
|
|
550
|
+
<property name="visible">True</property>
|
|
551
|
+
<property name="can_focus">True</property>
|
|
552
|
+
<property name="receives_default">True</property>
|
|
553
|
+
<property name="use_action_appearance">False</property>
|
|
554
|
+
<property name="use_stock">True</property>
|
|
555
|
+
</object>
|
|
556
|
+
<packing>
|
|
557
|
+
<property name="expand">False</property>
|
|
558
|
+
<property name="fill">True</property>
|
|
559
|
+
<property name="position">0</property>
|
|
560
|
+
</packing>
|
|
561
|
+
</child>
|
|
562
|
+
<child>
|
|
563
|
+
<object class="GtkButton" id="message_dialog_button_yes">
|
|
564
|
+
<property name="label">gtk-yes</property>
|
|
565
|
+
<property name="use_action_appearance">False</property>
|
|
566
|
+
<property name="visible">True</property>
|
|
567
|
+
<property name="can_focus">True</property>
|
|
568
|
+
<property name="receives_default">True</property>
|
|
569
|
+
<property name="use_action_appearance">False</property>
|
|
570
|
+
<property name="use_stock">True</property>
|
|
571
|
+
</object>
|
|
572
|
+
<packing>
|
|
573
|
+
<property name="expand">False</property>
|
|
574
|
+
<property name="fill">True</property>
|
|
575
|
+
<property name="position">1</property>
|
|
576
|
+
</packing>
|
|
577
|
+
</child>
|
|
578
|
+
<child>
|
|
579
|
+
<object class="GtkButton" id="message_dialog_button_ok">
|
|
580
|
+
<property name="label">gtk-ok</property>
|
|
581
|
+
<property name="use_action_appearance">False</property>
|
|
582
|
+
<property name="visible">True</property>
|
|
583
|
+
<property name="can_focus">True</property>
|
|
584
|
+
<property name="receives_default">True</property>
|
|
585
|
+
<property name="use_action_appearance">False</property>
|
|
586
|
+
<property name="use_stock">True</property>
|
|
587
|
+
</object>
|
|
588
|
+
<packing>
|
|
589
|
+
<property name="expand">False</property>
|
|
590
|
+
<property name="fill">True</property>
|
|
591
|
+
<property name="position">2</property>
|
|
592
|
+
</packing>
|
|
593
|
+
</child>
|
|
594
|
+
</object>
|
|
595
|
+
<packing>
|
|
596
|
+
<property name="expand">False</property>
|
|
597
|
+
<property name="fill">True</property>
|
|
598
|
+
<property name="pack_type">end</property>
|
|
599
|
+
<property name="position">0</property>
|
|
600
|
+
</packing>
|
|
601
|
+
</child>
|
|
602
|
+
</object>
|
|
603
|
+
</child>
|
|
604
|
+
<action-widgets>
|
|
605
|
+
<action-widget response="-1">message_dialog_button_no</action-widget>
|
|
606
|
+
<action-widget response="1">message_dialog_button_yes</action-widget>
|
|
607
|
+
<action-widget response="1">message_dialog_button_ok</action-widget>
|
|
608
|
+
</action-widgets>
|
|
609
|
+
</object>
|
|
610
|
+
<object class="GtkDialog" id="new_addr_dialog">
|
|
611
|
+
<property name="can_focus">False</property>
|
|
612
|
+
<property name="border_width">5</property>
|
|
613
|
+
<property name="title" translatable="yes">New Address</property>
|
|
614
|
+
<property name="type_hint">dialog</property>
|
|
615
|
+
<child internal-child="vbox">
|
|
616
|
+
<object class="GtkBox" id="dialog-vbox1">
|
|
617
|
+
<property name="can_focus">False</property>
|
|
618
|
+
<property name="orientation">vertical</property>
|
|
619
|
+
<property name="spacing">2</property>
|
|
620
|
+
<child internal-child="action_area">
|
|
621
|
+
<object class="GtkButtonBox" id="dialog-action_area1">
|
|
622
|
+
<property name="can_focus">False</property>
|
|
623
|
+
<property name="layout_style">end</property>
|
|
624
|
+
<child>
|
|
625
|
+
<object class="GtkButton" id="new_addr_dialog_cancel">
|
|
626
|
+
<property name="label">gtk-cancel</property>
|
|
627
|
+
<property name="use_action_appearance">False</property>
|
|
628
|
+
<property name="visible">True</property>
|
|
629
|
+
<property name="can_focus">True</property>
|
|
630
|
+
<property name="receives_default">True</property>
|
|
631
|
+
<property name="use_action_appearance">False</property>
|
|
632
|
+
<property name="use_stock">True</property>
|
|
633
|
+
<signal name="clicked" handler="on_new_addr_cancel" swapped="no"/>
|
|
634
|
+
</object>
|
|
635
|
+
<packing>
|
|
636
|
+
<property name="expand">False</property>
|
|
637
|
+
<property name="fill">True</property>
|
|
638
|
+
<property name="position">0</property>
|
|
639
|
+
</packing>
|
|
640
|
+
</child>
|
|
641
|
+
<child>
|
|
642
|
+
<object class="GtkButton" id="new_addr_dialog_apply">
|
|
643
|
+
<property name="label">gtk-apply</property>
|
|
644
|
+
<property name="use_action_appearance">False</property>
|
|
645
|
+
<property name="visible">True</property>
|
|
646
|
+
<property name="can_focus">True</property>
|
|
647
|
+
<property name="receives_default">True</property>
|
|
648
|
+
<property name="use_action_appearance">False</property>
|
|
649
|
+
<property name="use_stock">True</property>
|
|
650
|
+
<signal name="clicked" handler="on_new_addr_apply" swapped="no"/>
|
|
651
|
+
</object>
|
|
652
|
+
<packing>
|
|
653
|
+
<property name="expand">False</property>
|
|
654
|
+
<property name="fill">True</property>
|
|
655
|
+
<property name="position">1</property>
|
|
656
|
+
</packing>
|
|
657
|
+
</child>
|
|
658
|
+
</object>
|
|
659
|
+
<packing>
|
|
660
|
+
<property name="expand">False</property>
|
|
661
|
+
<property name="fill">True</property>
|
|
662
|
+
<property name="pack_type">end</property>
|
|
663
|
+
<property name="position">0</property>
|
|
664
|
+
</packing>
|
|
665
|
+
</child>
|
|
666
|
+
<child>
|
|
667
|
+
<object class="GtkGrid" id="grid8">
|
|
668
|
+
<property name="visible">True</property>
|
|
669
|
+
<property name="can_focus">False</property>
|
|
670
|
+
<child>
|
|
671
|
+
<object class="GtkLabel" id="label22">
|
|
672
|
+
<property name="visible">True</property>
|
|
673
|
+
<property name="can_focus">False</property>
|
|
674
|
+
<property name="label" translatable="yes">Label</property>
|
|
675
|
+
</object>
|
|
676
|
+
<packing>
|
|
677
|
+
<property name="left_attach">0</property>
|
|
678
|
+
<property name="top_attach">0</property>
|
|
679
|
+
<property name="width">1</property>
|
|
680
|
+
<property name="height">1</property>
|
|
681
|
+
</packing>
|
|
682
|
+
</child>
|
|
683
|
+
<child>
|
|
684
|
+
<object class="GtkEntry" id="new_addr_entry_label">
|
|
685
|
+
<property name="visible">True</property>
|
|
686
|
+
<property name="can_focus">True</property>
|
|
687
|
+
<property name="invisible_char">●</property>
|
|
688
|
+
<property name="invisible_char_set">True</property>
|
|
689
|
+
</object>
|
|
690
|
+
<packing>
|
|
691
|
+
<property name="left_attach">1</property>
|
|
692
|
+
<property name="top_attach">0</property>
|
|
693
|
+
<property name="width">1</property>
|
|
694
|
+
<property name="height">1</property>
|
|
695
|
+
</packing>
|
|
696
|
+
</child>
|
|
697
|
+
<child>
|
|
698
|
+
<object class="GtkCheckButton" id="new_addr_check_addr">
|
|
699
|
+
<property name="label" translatable="yes">Address</property>
|
|
700
|
+
<property name="use_action_appearance">False</property>
|
|
701
|
+
<property name="visible">True</property>
|
|
702
|
+
<property name="can_focus">True</property>
|
|
703
|
+
<property name="receives_default">False</property>
|
|
704
|
+
<property name="use_action_appearance">False</property>
|
|
705
|
+
<property name="xalign">0</property>
|
|
706
|
+
<property name="draw_indicator">True</property>
|
|
707
|
+
</object>
|
|
708
|
+
<packing>
|
|
709
|
+
<property name="left_attach">0</property>
|
|
710
|
+
<property name="top_attach">1</property>
|
|
711
|
+
<property name="width">1</property>
|
|
712
|
+
<property name="height">1</property>
|
|
713
|
+
</packing>
|
|
714
|
+
</child>
|
|
715
|
+
<child>
|
|
716
|
+
<object class="GtkEntry" id="new_addr_entry_addr">
|
|
717
|
+
<property name="visible">True</property>
|
|
718
|
+
<property name="can_focus">True</property>
|
|
719
|
+
<property name="invisible_char">●</property>
|
|
720
|
+
<property name="invisible_char_set">True</property>
|
|
721
|
+
</object>
|
|
722
|
+
<packing>
|
|
723
|
+
<property name="left_attach">1</property>
|
|
724
|
+
<property name="top_attach">1</property>
|
|
725
|
+
<property name="width">1</property>
|
|
726
|
+
<property name="height">1</property>
|
|
727
|
+
</packing>
|
|
728
|
+
</child>
|
|
729
|
+
<child>
|
|
730
|
+
<object class="GtkCheckButton" id="new_addr_check_pubkey">
|
|
731
|
+
<property name="label" translatable="yes">Pubkey</property>
|
|
732
|
+
<property name="use_action_appearance">False</property>
|
|
733
|
+
<property name="visible">True</property>
|
|
734
|
+
<property name="can_focus">True</property>
|
|
735
|
+
<property name="receives_default">False</property>
|
|
736
|
+
<property name="use_action_appearance">False</property>
|
|
737
|
+
<property name="xalign">0</property>
|
|
738
|
+
<property name="draw_indicator">True</property>
|
|
739
|
+
</object>
|
|
740
|
+
<packing>
|
|
741
|
+
<property name="left_attach">0</property>
|
|
742
|
+
<property name="top_attach">2</property>
|
|
743
|
+
<property name="width">1</property>
|
|
744
|
+
<property name="height">1</property>
|
|
745
|
+
</packing>
|
|
746
|
+
</child>
|
|
747
|
+
<child>
|
|
748
|
+
<object class="GtkEntry" id="new_addr_entry_pubkey">
|
|
749
|
+
<property name="visible">True</property>
|
|
750
|
+
<property name="can_focus">True</property>
|
|
751
|
+
<property name="invisible_char">●</property>
|
|
752
|
+
<property name="invisible_char_set">True</property>
|
|
753
|
+
</object>
|
|
754
|
+
<packing>
|
|
755
|
+
<property name="left_attach">1</property>
|
|
756
|
+
<property name="top_attach">2</property>
|
|
757
|
+
<property name="width">1</property>
|
|
758
|
+
<property name="height">1</property>
|
|
759
|
+
</packing>
|
|
760
|
+
</child>
|
|
761
|
+
<child>
|
|
762
|
+
<object class="GtkCheckButton" id="new_addr_check_mine">
|
|
763
|
+
<property name="label" translatable="yes">Mine</property>
|
|
764
|
+
<property name="use_action_appearance">False</property>
|
|
765
|
+
<property name="visible">True</property>
|
|
766
|
+
<property name="can_focus">True</property>
|
|
767
|
+
<property name="receives_default">False</property>
|
|
768
|
+
<property name="use_action_appearance">False</property>
|
|
769
|
+
<property name="xalign">0</property>
|
|
770
|
+
<property name="active">True</property>
|
|
771
|
+
<property name="draw_indicator">True</property>
|
|
772
|
+
</object>
|
|
773
|
+
<packing>
|
|
774
|
+
<property name="left_attach">0</property>
|
|
775
|
+
<property name="top_attach">3</property>
|
|
776
|
+
<property name="width">1</property>
|
|
777
|
+
<property name="height">1</property>
|
|
778
|
+
</packing>
|
|
779
|
+
</child>
|
|
780
|
+
<child>
|
|
781
|
+
<placeholder/>
|
|
782
|
+
</child>
|
|
783
|
+
</object>
|
|
784
|
+
<packing>
|
|
785
|
+
<property name="expand">False</property>
|
|
786
|
+
<property name="fill">True</property>
|
|
787
|
+
<property name="position">1</property>
|
|
788
|
+
</packing>
|
|
789
|
+
</child>
|
|
790
|
+
</object>
|
|
791
|
+
</child>
|
|
792
|
+
<action-widgets>
|
|
793
|
+
<action-widget response="0">new_addr_dialog_cancel</action-widget>
|
|
794
|
+
<action-widget response="1">new_addr_dialog_apply</action-widget>
|
|
795
|
+
</action-widgets>
|
|
796
|
+
</object>
|
|
797
|
+
<object class="GtkDialog" id="new_tx_dialog">
|
|
798
|
+
<property name="can_focus">False</property>
|
|
799
|
+
<property name="border_width">5</property>
|
|
800
|
+
<property name="title" translatable="yes">New Transaction</property>
|
|
801
|
+
<property name="type_hint">dialog</property>
|
|
802
|
+
<child internal-child="vbox">
|
|
803
|
+
<object class="GtkBox" id="dialog-vbox3">
|
|
804
|
+
<property name="can_focus">False</property>
|
|
805
|
+
<property name="orientation">vertical</property>
|
|
806
|
+
<property name="spacing">2</property>
|
|
807
|
+
<child internal-child="action_area">
|
|
808
|
+
<object class="GtkButtonBox" id="dialog-action_area3">
|
|
809
|
+
<property name="can_focus">False</property>
|
|
810
|
+
<property name="layout_style">end</property>
|
|
811
|
+
<child>
|
|
812
|
+
<object class="GtkButton" id="button5">
|
|
813
|
+
<property name="label">gtk-cancel</property>
|
|
814
|
+
<property name="use_action_appearance">False</property>
|
|
815
|
+
<property name="visible">True</property>
|
|
816
|
+
<property name="can_focus">True</property>
|
|
817
|
+
<property name="receives_default">True</property>
|
|
818
|
+
<property name="use_action_appearance">False</property>
|
|
819
|
+
<property name="use_stock">True</property>
|
|
820
|
+
</object>
|
|
821
|
+
<packing>
|
|
822
|
+
<property name="expand">False</property>
|
|
823
|
+
<property name="fill">True</property>
|
|
824
|
+
<property name="position">0</property>
|
|
825
|
+
</packing>
|
|
826
|
+
</child>
|
|
827
|
+
<child>
|
|
828
|
+
<object class="GtkButton" id="button6">
|
|
829
|
+
<property name="label">gtk-apply</property>
|
|
830
|
+
<property name="use_action_appearance">False</property>
|
|
831
|
+
<property name="visible">True</property>
|
|
832
|
+
<property name="can_focus">True</property>
|
|
833
|
+
<property name="receives_default">True</property>
|
|
834
|
+
<property name="use_action_appearance">False</property>
|
|
835
|
+
<property name="use_stock">True</property>
|
|
836
|
+
</object>
|
|
837
|
+
<packing>
|
|
838
|
+
<property name="expand">False</property>
|
|
839
|
+
<property name="fill">True</property>
|
|
840
|
+
<property name="position">1</property>
|
|
841
|
+
</packing>
|
|
842
|
+
</child>
|
|
843
|
+
</object>
|
|
844
|
+
<packing>
|
|
845
|
+
<property name="expand">False</property>
|
|
846
|
+
<property name="fill">True</property>
|
|
847
|
+
<property name="pack_type">end</property>
|
|
848
|
+
<property name="position">0</property>
|
|
849
|
+
</packing>
|
|
850
|
+
</child>
|
|
851
|
+
<child>
|
|
852
|
+
<object class="GtkGrid" id="grid2">
|
|
853
|
+
<property name="visible">True</property>
|
|
854
|
+
<property name="can_focus">False</property>
|
|
855
|
+
<child>
|
|
856
|
+
<object class="GtkLabel" id="label4">
|
|
857
|
+
<property name="visible">True</property>
|
|
858
|
+
<property name="can_focus">False</property>
|
|
859
|
+
<property name="label" translatable="yes">Recipient</property>
|
|
860
|
+
</object>
|
|
861
|
+
<packing>
|
|
862
|
+
<property name="left_attach">0</property>
|
|
863
|
+
<property name="top_attach">0</property>
|
|
864
|
+
<property name="width">1</property>
|
|
865
|
+
<property name="height">1</property>
|
|
866
|
+
</packing>
|
|
867
|
+
</child>
|
|
868
|
+
<child>
|
|
869
|
+
<object class="GtkLabel" id="label5">
|
|
870
|
+
<property name="visible">True</property>
|
|
871
|
+
<property name="can_focus">False</property>
|
|
872
|
+
<property name="label" translatable="yes">Amount</property>
|
|
873
|
+
</object>
|
|
874
|
+
<packing>
|
|
875
|
+
<property name="left_attach">0</property>
|
|
876
|
+
<property name="top_attach">1</property>
|
|
877
|
+
<property name="width">1</property>
|
|
878
|
+
<property name="height">1</property>
|
|
879
|
+
</packing>
|
|
880
|
+
</child>
|
|
881
|
+
<child>
|
|
882
|
+
<object class="GtkEntry" id="new_tx_entry_address">
|
|
883
|
+
<property name="visible">True</property>
|
|
884
|
+
<property name="can_focus">True</property>
|
|
885
|
+
<property name="invisible_char">●</property>
|
|
886
|
+
</object>
|
|
887
|
+
<packing>
|
|
888
|
+
<property name="left_attach">1</property>
|
|
889
|
+
<property name="top_attach">0</property>
|
|
890
|
+
<property name="width">1</property>
|
|
891
|
+
<property name="height">1</property>
|
|
892
|
+
</packing>
|
|
893
|
+
</child>
|
|
894
|
+
<child>
|
|
895
|
+
<object class="GtkEntry" id="new_tx_entry_amount">
|
|
896
|
+
<property name="visible">True</property>
|
|
897
|
+
<property name="can_focus">True</property>
|
|
898
|
+
<property name="invisible_char">●</property>
|
|
899
|
+
</object>
|
|
900
|
+
<packing>
|
|
901
|
+
<property name="left_attach">1</property>
|
|
902
|
+
<property name="top_attach">1</property>
|
|
903
|
+
<property name="width">1</property>
|
|
904
|
+
<property name="height">1</property>
|
|
905
|
+
</packing>
|
|
906
|
+
</child>
|
|
907
|
+
</object>
|
|
908
|
+
<packing>
|
|
909
|
+
<property name="expand">False</property>
|
|
910
|
+
<property name="fill">True</property>
|
|
911
|
+
<property name="position">1</property>
|
|
912
|
+
</packing>
|
|
913
|
+
</child>
|
|
914
|
+
</object>
|
|
915
|
+
</child>
|
|
916
|
+
<action-widgets>
|
|
917
|
+
<action-widget response="0">button5</action-widget>
|
|
918
|
+
<action-widget response="1">button6</action-widget>
|
|
919
|
+
</action-widgets>
|
|
920
|
+
</object>
|
|
921
|
+
<object class="GtkEntryCompletion" id="new_tx_recipient_completion"/>
|
|
922
|
+
<object class="GtkMenu" id="popup_menu">
|
|
923
|
+
<property name="visible">True</property>
|
|
924
|
+
<property name="can_focus">False</property>
|
|
925
|
+
<child>
|
|
926
|
+
<object class="GtkImageMenuItem" id="menu_popup_quit">
|
|
927
|
+
<property name="label">gtk-quit</property>
|
|
928
|
+
<property name="use_action_appearance">False</property>
|
|
929
|
+
<property name="related_action">action_exit</property>
|
|
930
|
+
<property name="visible">True</property>
|
|
931
|
+
<property name="can_focus">False</property>
|
|
932
|
+
<property name="use_underline">True</property>
|
|
933
|
+
<property name="use_stock">True</property>
|
|
934
|
+
</object>
|
|
935
|
+
</child>
|
|
936
|
+
</object>
|
|
937
|
+
<object class="GtkDialog" id="preferences_dialog">
|
|
938
|
+
<property name="can_focus">False</property>
|
|
939
|
+
<property name="border_width">5</property>
|
|
940
|
+
<property name="title" translatable="yes">Preferences</property>
|
|
941
|
+
<property name="type_hint">dialog</property>
|
|
942
|
+
<child internal-child="vbox">
|
|
943
|
+
<object class="GtkBox" id="dialog-vbox4">
|
|
944
|
+
<property name="can_focus">False</property>
|
|
945
|
+
<property name="orientation">vertical</property>
|
|
946
|
+
<property name="spacing">2</property>
|
|
947
|
+
<child internal-child="action_area">
|
|
948
|
+
<object class="GtkButtonBox" id="dialog-action_area4">
|
|
949
|
+
<property name="can_focus">False</property>
|
|
950
|
+
<property name="layout_style">end</property>
|
|
951
|
+
<child>
|
|
952
|
+
<object class="GtkButton" id="button7">
|
|
953
|
+
<property name="label">gtk-cancel</property>
|
|
954
|
+
<property name="use_action_appearance">False</property>
|
|
955
|
+
<property name="visible">True</property>
|
|
956
|
+
<property name="can_focus">True</property>
|
|
957
|
+
<property name="receives_default">True</property>
|
|
958
|
+
<property name="use_action_appearance">False</property>
|
|
959
|
+
<property name="use_stock">True</property>
|
|
960
|
+
</object>
|
|
961
|
+
<packing>
|
|
962
|
+
<property name="expand">False</property>
|
|
963
|
+
<property name="fill">True</property>
|
|
964
|
+
<property name="position">0</property>
|
|
965
|
+
</packing>
|
|
966
|
+
</child>
|
|
967
|
+
<child>
|
|
968
|
+
<object class="GtkButton" id="button8">
|
|
969
|
+
<property name="label">gtk-save</property>
|
|
970
|
+
<property name="use_action_appearance">False</property>
|
|
971
|
+
<property name="visible">True</property>
|
|
972
|
+
<property name="can_focus">True</property>
|
|
973
|
+
<property name="receives_default">True</property>
|
|
974
|
+
<property name="use_action_appearance">False</property>
|
|
975
|
+
<property name="use_stock">True</property>
|
|
976
|
+
</object>
|
|
977
|
+
<packing>
|
|
978
|
+
<property name="expand">False</property>
|
|
979
|
+
<property name="fill">True</property>
|
|
980
|
+
<property name="position">1</property>
|
|
981
|
+
</packing>
|
|
982
|
+
</child>
|
|
983
|
+
</object>
|
|
984
|
+
<packing>
|
|
985
|
+
<property name="expand">False</property>
|
|
986
|
+
<property name="fill">True</property>
|
|
987
|
+
<property name="pack_type">end</property>
|
|
988
|
+
<property name="position">0</property>
|
|
989
|
+
</packing>
|
|
990
|
+
</child>
|
|
991
|
+
<child>
|
|
992
|
+
<object class="GtkNotebook" id="notebook1">
|
|
993
|
+
<property name="visible">True</property>
|
|
994
|
+
<property name="can_focus">True</property>
|
|
995
|
+
<property name="tab_pos">left</property>
|
|
996
|
+
<child>
|
|
997
|
+
<object class="GtkGrid" id="grid3">
|
|
998
|
+
<property name="visible">True</property>
|
|
999
|
+
<property name="can_focus">False</property>
|
|
1000
|
+
<child>
|
|
1001
|
+
<object class="GtkLabel" id="label9">
|
|
1002
|
+
<property name="visible">True</property>
|
|
1003
|
+
<property name="can_focus">False</property>
|
|
1004
|
+
<property name="label" translatable="yes">Network</property>
|
|
1005
|
+
</object>
|
|
1006
|
+
<packing>
|
|
1007
|
+
<property name="left_attach">0</property>
|
|
1008
|
+
<property name="top_attach">0</property>
|
|
1009
|
+
<property name="width">1</property>
|
|
1010
|
+
<property name="height">1</property>
|
|
1011
|
+
</packing>
|
|
1012
|
+
</child>
|
|
1013
|
+
<child>
|
|
1014
|
+
<object class="GtkLabel" id="label10">
|
|
1015
|
+
<property name="visible">True</property>
|
|
1016
|
+
<property name="can_focus">False</property>
|
|
1017
|
+
<property name="label" translatable="yes">Command Socket</property>
|
|
1018
|
+
</object>
|
|
1019
|
+
<packing>
|
|
1020
|
+
<property name="left_attach">0</property>
|
|
1021
|
+
<property name="top_attach">1</property>
|
|
1022
|
+
<property name="width">1</property>
|
|
1023
|
+
<property name="height">1</property>
|
|
1024
|
+
</packing>
|
|
1025
|
+
</child>
|
|
1026
|
+
<child>
|
|
1027
|
+
<object class="GtkLabel" id="label11">
|
|
1028
|
+
<property name="visible">True</property>
|
|
1029
|
+
<property name="can_focus">False</property>
|
|
1030
|
+
<property name="label" translatable="yes">Listen Socket</property>
|
|
1031
|
+
</object>
|
|
1032
|
+
<packing>
|
|
1033
|
+
<property name="left_attach">0</property>
|
|
1034
|
+
<property name="top_attach">2</property>
|
|
1035
|
+
<property name="width">1</property>
|
|
1036
|
+
<property name="height">1</property>
|
|
1037
|
+
</packing>
|
|
1038
|
+
</child>
|
|
1039
|
+
<child>
|
|
1040
|
+
<object class="GtkEntry" id="preferences_entry_command">
|
|
1041
|
+
<property name="visible">True</property>
|
|
1042
|
+
<property name="can_focus">True</property>
|
|
1043
|
+
<property name="invisible_char">●</property>
|
|
1044
|
+
</object>
|
|
1045
|
+
<packing>
|
|
1046
|
+
<property name="left_attach">1</property>
|
|
1047
|
+
<property name="top_attach">1</property>
|
|
1048
|
+
<property name="width">1</property>
|
|
1049
|
+
<property name="height">1</property>
|
|
1050
|
+
</packing>
|
|
1051
|
+
</child>
|
|
1052
|
+
<child>
|
|
1053
|
+
<object class="GtkEntry" id="preferences_entry_listen">
|
|
1054
|
+
<property name="visible">True</property>
|
|
1055
|
+
<property name="can_focus">True</property>
|
|
1056
|
+
<property name="invisible_char">●</property>
|
|
1057
|
+
</object>
|
|
1058
|
+
<packing>
|
|
1059
|
+
<property name="left_attach">1</property>
|
|
1060
|
+
<property name="top_attach">2</property>
|
|
1061
|
+
<property name="width">1</property>
|
|
1062
|
+
<property name="height">1</property>
|
|
1063
|
+
</packing>
|
|
1064
|
+
</child>
|
|
1065
|
+
<child>
|
|
1066
|
+
<object class="GtkEntry" id="preferences_entry_network">
|
|
1067
|
+
<property name="visible">True</property>
|
|
1068
|
+
<property name="can_focus">True</property>
|
|
1069
|
+
<property name="invisible_char">●</property>
|
|
1070
|
+
</object>
|
|
1071
|
+
<packing>
|
|
1072
|
+
<property name="left_attach">1</property>
|
|
1073
|
+
<property name="top_attach">0</property>
|
|
1074
|
+
<property name="width">1</property>
|
|
1075
|
+
<property name="height">1</property>
|
|
1076
|
+
</packing>
|
|
1077
|
+
</child>
|
|
1078
|
+
<child>
|
|
1079
|
+
<object class="GtkLabel" id="label17">
|
|
1080
|
+
<property name="visible">True</property>
|
|
1081
|
+
<property name="can_focus">False</property>
|
|
1082
|
+
<property name="label" translatable="yes">Storage Backend</property>
|
|
1083
|
+
</object>
|
|
1084
|
+
<packing>
|
|
1085
|
+
<property name="left_attach">0</property>
|
|
1086
|
+
<property name="top_attach">3</property>
|
|
1087
|
+
<property name="width">1</property>
|
|
1088
|
+
<property name="height">1</property>
|
|
1089
|
+
</packing>
|
|
1090
|
+
</child>
|
|
1091
|
+
<child>
|
|
1092
|
+
<object class="GtkComboBox" id="combobox2">
|
|
1093
|
+
<property name="visible">True</property>
|
|
1094
|
+
<property name="can_focus">False</property>
|
|
1095
|
+
</object>
|
|
1096
|
+
<packing>
|
|
1097
|
+
<property name="left_attach">1</property>
|
|
1098
|
+
<property name="top_attach">3</property>
|
|
1099
|
+
<property name="width">1</property>
|
|
1100
|
+
<property name="height">1</property>
|
|
1101
|
+
</packing>
|
|
1102
|
+
</child>
|
|
1103
|
+
</object>
|
|
1104
|
+
</child>
|
|
1105
|
+
<child type="tab">
|
|
1106
|
+
<object class="GtkLabel" id="label6">
|
|
1107
|
+
<property name="visible">True</property>
|
|
1108
|
+
<property name="can_focus">False</property>
|
|
1109
|
+
<property name="label" translatable="yes">General</property>
|
|
1110
|
+
</object>
|
|
1111
|
+
<packing>
|
|
1112
|
+
<property name="tab_fill">False</property>
|
|
1113
|
+
</packing>
|
|
1114
|
+
</child>
|
|
1115
|
+
<child>
|
|
1116
|
+
<object class="GtkGrid" id="grid4">
|
|
1117
|
+
<property name="visible">True</property>
|
|
1118
|
+
<property name="can_focus">False</property>
|
|
1119
|
+
<child>
|
|
1120
|
+
<object class="GtkLabel" id="label12">
|
|
1121
|
+
<property name="visible">True</property>
|
|
1122
|
+
<property name="can_focus">False</property>
|
|
1123
|
+
<property name="label" translatable="yes">Headers Only</property>
|
|
1124
|
+
</object>
|
|
1125
|
+
<packing>
|
|
1126
|
+
<property name="left_attach">0</property>
|
|
1127
|
+
<property name="top_attach">0</property>
|
|
1128
|
+
<property name="width">1</property>
|
|
1129
|
+
<property name="height">1</property>
|
|
1130
|
+
</packing>
|
|
1131
|
+
</child>
|
|
1132
|
+
<child>
|
|
1133
|
+
<object class="GtkLabel" id="label13">
|
|
1134
|
+
<property name="visible">True</property>
|
|
1135
|
+
<property name="can_focus">False</property>
|
|
1136
|
+
<property name="label" translatable="yes">DNS</property>
|
|
1137
|
+
</object>
|
|
1138
|
+
<packing>
|
|
1139
|
+
<property name="left_attach">0</property>
|
|
1140
|
+
<property name="top_attach">1</property>
|
|
1141
|
+
<property name="width">1</property>
|
|
1142
|
+
<property name="height">1</property>
|
|
1143
|
+
</packing>
|
|
1144
|
+
</child>
|
|
1145
|
+
<child>
|
|
1146
|
+
<object class="GtkLabel" id="label14">
|
|
1147
|
+
<property name="visible">True</property>
|
|
1148
|
+
<property name="can_focus">False</property>
|
|
1149
|
+
</object>
|
|
1150
|
+
<packing>
|
|
1151
|
+
<property name="left_attach">0</property>
|
|
1152
|
+
<property name="top_attach">2</property>
|
|
1153
|
+
<property name="width">1</property>
|
|
1154
|
+
<property name="height">1</property>
|
|
1155
|
+
</packing>
|
|
1156
|
+
</child>
|
|
1157
|
+
<child>
|
|
1158
|
+
<object class="GtkSwitch" id="switch1">
|
|
1159
|
+
<property name="use_action_appearance">False</property>
|
|
1160
|
+
<property name="visible">True</property>
|
|
1161
|
+
<property name="can_focus">True</property>
|
|
1162
|
+
<property name="use_action_appearance">False</property>
|
|
1163
|
+
</object>
|
|
1164
|
+
<packing>
|
|
1165
|
+
<property name="left_attach">1</property>
|
|
1166
|
+
<property name="top_attach">0</property>
|
|
1167
|
+
<property name="width">1</property>
|
|
1168
|
+
<property name="height">1</property>
|
|
1169
|
+
</packing>
|
|
1170
|
+
</child>
|
|
1171
|
+
<child>
|
|
1172
|
+
<object class="GtkSwitch" id="switch2">
|
|
1173
|
+
<property name="use_action_appearance">False</property>
|
|
1174
|
+
<property name="visible">True</property>
|
|
1175
|
+
<property name="can_focus">True</property>
|
|
1176
|
+
<property name="use_action_appearance">False</property>
|
|
1177
|
+
</object>
|
|
1178
|
+
<packing>
|
|
1179
|
+
<property name="left_attach">1</property>
|
|
1180
|
+
<property name="top_attach">1</property>
|
|
1181
|
+
<property name="width">1</property>
|
|
1182
|
+
<property name="height">1</property>
|
|
1183
|
+
</packing>
|
|
1184
|
+
</child>
|
|
1185
|
+
<child>
|
|
1186
|
+
<placeholder/>
|
|
1187
|
+
</child>
|
|
1188
|
+
</object>
|
|
1189
|
+
<packing>
|
|
1190
|
+
<property name="position">1</property>
|
|
1191
|
+
</packing>
|
|
1192
|
+
</child>
|
|
1193
|
+
<child type="tab">
|
|
1194
|
+
<object class="GtkLabel" id="label7">
|
|
1195
|
+
<property name="visible">True</property>
|
|
1196
|
+
<property name="can_focus">False</property>
|
|
1197
|
+
<property name="label" translatable="yes">Node</property>
|
|
1198
|
+
</object>
|
|
1199
|
+
<packing>
|
|
1200
|
+
<property name="position">1</property>
|
|
1201
|
+
<property name="tab_fill">False</property>
|
|
1202
|
+
</packing>
|
|
1203
|
+
</child>
|
|
1204
|
+
<child>
|
|
1205
|
+
<object class="GtkGrid" id="grid5">
|
|
1206
|
+
<property name="visible">True</property>
|
|
1207
|
+
<property name="can_focus">False</property>
|
|
1208
|
+
<child>
|
|
1209
|
+
<object class="GtkLabel" id="label15">
|
|
1210
|
+
<property name="visible">True</property>
|
|
1211
|
+
<property name="can_focus">False</property>
|
|
1212
|
+
<property name="label" translatable="yes">Backend</property>
|
|
1213
|
+
</object>
|
|
1214
|
+
<packing>
|
|
1215
|
+
<property name="left_attach">0</property>
|
|
1216
|
+
<property name="top_attach">0</property>
|
|
1217
|
+
<property name="width">1</property>
|
|
1218
|
+
<property name="height">1</property>
|
|
1219
|
+
</packing>
|
|
1220
|
+
</child>
|
|
1221
|
+
<child>
|
|
1222
|
+
<object class="GtkLabel" id="label16">
|
|
1223
|
+
<property name="visible">True</property>
|
|
1224
|
+
<property name="can_focus">False</property>
|
|
1225
|
+
<property name="label" translatable="yes">File</property>
|
|
1226
|
+
</object>
|
|
1227
|
+
<packing>
|
|
1228
|
+
<property name="left_attach">1</property>
|
|
1229
|
+
<property name="top_attach">0</property>
|
|
1230
|
+
<property name="width">1</property>
|
|
1231
|
+
<property name="height">1</property>
|
|
1232
|
+
</packing>
|
|
1233
|
+
</child>
|
|
1234
|
+
<child>
|
|
1235
|
+
<object class="GtkComboBox" id="combobox1">
|
|
1236
|
+
<property name="visible">True</property>
|
|
1237
|
+
<property name="can_focus">False</property>
|
|
1238
|
+
</object>
|
|
1239
|
+
<packing>
|
|
1240
|
+
<property name="left_attach">0</property>
|
|
1241
|
+
<property name="top_attach">1</property>
|
|
1242
|
+
<property name="width">1</property>
|
|
1243
|
+
<property name="height">1</property>
|
|
1244
|
+
</packing>
|
|
1245
|
+
</child>
|
|
1246
|
+
<child>
|
|
1247
|
+
<object class="GtkFileChooserButton" id="filechooserbutton1">
|
|
1248
|
+
<property name="visible">True</property>
|
|
1249
|
+
<property name="can_focus">False</property>
|
|
1250
|
+
<property name="orientation">vertical</property>
|
|
1251
|
+
</object>
|
|
1252
|
+
<packing>
|
|
1253
|
+
<property name="left_attach">1</property>
|
|
1254
|
+
<property name="top_attach">1</property>
|
|
1255
|
+
<property name="width">1</property>
|
|
1256
|
+
<property name="height">1</property>
|
|
1257
|
+
</packing>
|
|
1258
|
+
</child>
|
|
1259
|
+
</object>
|
|
1260
|
+
<packing>
|
|
1261
|
+
<property name="position">2</property>
|
|
1262
|
+
</packing>
|
|
1263
|
+
</child>
|
|
1264
|
+
<child type="tab">
|
|
1265
|
+
<object class="GtkLabel" id="label8">
|
|
1266
|
+
<property name="visible">True</property>
|
|
1267
|
+
<property name="can_focus">False</property>
|
|
1268
|
+
<property name="label" translatable="yes">Wallet</property>
|
|
1269
|
+
</object>
|
|
1270
|
+
<packing>
|
|
1271
|
+
<property name="position">2</property>
|
|
1272
|
+
<property name="tab_fill">False</property>
|
|
1273
|
+
</packing>
|
|
1274
|
+
</child>
|
|
1275
|
+
</object>
|
|
1276
|
+
<packing>
|
|
1277
|
+
<property name="expand">False</property>
|
|
1278
|
+
<property name="fill">True</property>
|
|
1279
|
+
<property name="position">1</property>
|
|
1280
|
+
</packing>
|
|
1281
|
+
</child>
|
|
1282
|
+
</object>
|
|
1283
|
+
</child>
|
|
1284
|
+
<action-widgets>
|
|
1285
|
+
<action-widget response="0">button7</action-widget>
|
|
1286
|
+
<action-widget response="0">button8</action-widget>
|
|
1287
|
+
</action-widgets>
|
|
1288
|
+
</object>
|
|
1289
|
+
<object class="GtkStatusIcon" id="statusicon">
|
|
1290
|
+
<property name="pixbuf">bitcoin-ruby.png</property>
|
|
1291
|
+
</object>
|
|
1292
|
+
<object class="GtkDialog" id="tx_dialog">
|
|
1293
|
+
<property name="can_focus">False</property>
|
|
1294
|
+
<property name="border_width">5</property>
|
|
1295
|
+
<property name="title" translatable="yes">Transaction</property>
|
|
1296
|
+
<property name="type_hint">dialog</property>
|
|
1297
|
+
<child internal-child="vbox">
|
|
1298
|
+
<object class="GtkBox" id="dialog-vbox6">
|
|
1299
|
+
<property name="can_focus">False</property>
|
|
1300
|
+
<property name="orientation">vertical</property>
|
|
1301
|
+
<property name="spacing">2</property>
|
|
1302
|
+
<child internal-child="action_area">
|
|
1303
|
+
<object class="GtkButtonBox" id="dialog-action_area6">
|
|
1304
|
+
<property name="can_focus">False</property>
|
|
1305
|
+
<property name="layout_style">end</property>
|
|
1306
|
+
<child>
|
|
1307
|
+
<placeholder/>
|
|
1308
|
+
</child>
|
|
1309
|
+
<child>
|
|
1310
|
+
<object class="GtkButton" id="button9">
|
|
1311
|
+
<property name="label">gtk-close</property>
|
|
1312
|
+
<property name="use_action_appearance">False</property>
|
|
1313
|
+
<property name="visible">True</property>
|
|
1314
|
+
<property name="can_focus">True</property>
|
|
1315
|
+
<property name="receives_default">True</property>
|
|
1316
|
+
<property name="use_action_appearance">False</property>
|
|
1317
|
+
<property name="use_stock">True</property>
|
|
1318
|
+
</object>
|
|
1319
|
+
<packing>
|
|
1320
|
+
<property name="expand">False</property>
|
|
1321
|
+
<property name="fill">True</property>
|
|
1322
|
+
<property name="position">1</property>
|
|
1323
|
+
</packing>
|
|
1324
|
+
</child>
|
|
1325
|
+
</object>
|
|
1326
|
+
<packing>
|
|
1327
|
+
<property name="expand">False</property>
|
|
1328
|
+
<property name="fill">True</property>
|
|
1329
|
+
<property name="pack_type">end</property>
|
|
1330
|
+
<property name="position">0</property>
|
|
1331
|
+
</packing>
|
|
1332
|
+
</child>
|
|
1333
|
+
<child>
|
|
1334
|
+
<object class="GtkGrid" id="grid6">
|
|
1335
|
+
<property name="visible">True</property>
|
|
1336
|
+
<property name="can_focus">False</property>
|
|
1337
|
+
<child>
|
|
1338
|
+
<object class="GtkLabel" id="tx_label_hash">
|
|
1339
|
+
<property name="visible">True</property>
|
|
1340
|
+
<property name="can_focus">False</property>
|
|
1341
|
+
<property name="label" translatable="yes">label</property>
|
|
1342
|
+
</object>
|
|
1343
|
+
<packing>
|
|
1344
|
+
<property name="left_attach">0</property>
|
|
1345
|
+
<property name="top_attach">0</property>
|
|
1346
|
+
<property name="width">4</property>
|
|
1347
|
+
<property name="height">1</property>
|
|
1348
|
+
</packing>
|
|
1349
|
+
</child>
|
|
1350
|
+
<child>
|
|
1351
|
+
<object class="GtkScrolledWindow" id="scrolledwindow4">
|
|
1352
|
+
<property name="visible">True</property>
|
|
1353
|
+
<property name="can_focus">True</property>
|
|
1354
|
+
<property name="shadow_type">in</property>
|
|
1355
|
+
<child>
|
|
1356
|
+
<object class="GtkTreeView" id="treeview2">
|
|
1357
|
+
<property name="visible">True</property>
|
|
1358
|
+
<property name="can_focus">True</property>
|
|
1359
|
+
<child internal-child="selection">
|
|
1360
|
+
<object class="GtkTreeSelection" id="treeview-selection6"/>
|
|
1361
|
+
</child>
|
|
1362
|
+
</object>
|
|
1363
|
+
</child>
|
|
1364
|
+
</object>
|
|
1365
|
+
<packing>
|
|
1366
|
+
<property name="left_attach">2</property>
|
|
1367
|
+
<property name="top_attach">3</property>
|
|
1368
|
+
<property name="width">2</property>
|
|
1369
|
+
<property name="height">2</property>
|
|
1370
|
+
</packing>
|
|
1371
|
+
</child>
|
|
1372
|
+
<child>
|
|
1373
|
+
<object class="GtkScrolledWindow" id="scrolledwindow5">
|
|
1374
|
+
<property name="visible">True</property>
|
|
1375
|
+
<property name="can_focus">True</property>
|
|
1376
|
+
<property name="shadow_type">in</property>
|
|
1377
|
+
<child>
|
|
1378
|
+
<object class="GtkTreeView" id="tx_txin_view">
|
|
1379
|
+
<property name="visible">True</property>
|
|
1380
|
+
<property name="can_focus">True</property>
|
|
1381
|
+
<child internal-child="selection">
|
|
1382
|
+
<object class="GtkTreeSelection" id="treeview-selection5"/>
|
|
1383
|
+
</child>
|
|
1384
|
+
</object>
|
|
1385
|
+
</child>
|
|
1386
|
+
</object>
|
|
1387
|
+
<packing>
|
|
1388
|
+
<property name="left_attach">0</property>
|
|
1389
|
+
<property name="top_attach">3</property>
|
|
1390
|
+
<property name="width">2</property>
|
|
1391
|
+
<property name="height">2</property>
|
|
1392
|
+
</packing>
|
|
1393
|
+
</child>
|
|
1394
|
+
<child>
|
|
1395
|
+
<object class="GtkLabel" id="label19">
|
|
1396
|
+
<property name="visible">True</property>
|
|
1397
|
+
<property name="can_focus">False</property>
|
|
1398
|
+
<property name="label" translatable="yes">Value:</property>
|
|
1399
|
+
</object>
|
|
1400
|
+
<packing>
|
|
1401
|
+
<property name="left_attach">0</property>
|
|
1402
|
+
<property name="top_attach">1</property>
|
|
1403
|
+
<property name="width">1</property>
|
|
1404
|
+
<property name="height">1</property>
|
|
1405
|
+
</packing>
|
|
1406
|
+
</child>
|
|
1407
|
+
<child>
|
|
1408
|
+
<object class="GtkLabel" id="tx_label_value">
|
|
1409
|
+
<property name="visible">True</property>
|
|
1410
|
+
<property name="can_focus">False</property>
|
|
1411
|
+
</object>
|
|
1412
|
+
<packing>
|
|
1413
|
+
<property name="left_attach">1</property>
|
|
1414
|
+
<property name="top_attach">1</property>
|
|
1415
|
+
<property name="width">1</property>
|
|
1416
|
+
<property name="height">1</property>
|
|
1417
|
+
</packing>
|
|
1418
|
+
</child>
|
|
1419
|
+
<child>
|
|
1420
|
+
<object class="GtkLabel" id="label21">
|
|
1421
|
+
<property name="visible">True</property>
|
|
1422
|
+
<property name="can_focus">False</property>
|
|
1423
|
+
<property name="label" translatable="yes">Confirmations:</property>
|
|
1424
|
+
</object>
|
|
1425
|
+
<packing>
|
|
1426
|
+
<property name="left_attach">2</property>
|
|
1427
|
+
<property name="top_attach">1</property>
|
|
1428
|
+
<property name="width">1</property>
|
|
1429
|
+
<property name="height">1</property>
|
|
1430
|
+
</packing>
|
|
1431
|
+
</child>
|
|
1432
|
+
<child>
|
|
1433
|
+
<object class="GtkLabel" id="tx_label_confirmations">
|
|
1434
|
+
<property name="visible">True</property>
|
|
1435
|
+
<property name="can_focus">False</property>
|
|
1436
|
+
</object>
|
|
1437
|
+
<packing>
|
|
1438
|
+
<property name="left_attach">3</property>
|
|
1439
|
+
<property name="top_attach">1</property>
|
|
1440
|
+
<property name="width">1</property>
|
|
1441
|
+
<property name="height">1</property>
|
|
1442
|
+
</packing>
|
|
1443
|
+
</child>
|
|
1444
|
+
<child>
|
|
1445
|
+
<object class="GtkLabel" id="label18">
|
|
1446
|
+
<property name="visible">True</property>
|
|
1447
|
+
<property name="can_focus">False</property>
|
|
1448
|
+
<property name="label" translatable="yes">Inputs</property>
|
|
1449
|
+
</object>
|
|
1450
|
+
<packing>
|
|
1451
|
+
<property name="left_attach">0</property>
|
|
1452
|
+
<property name="top_attach">2</property>
|
|
1453
|
+
<property name="width">2</property>
|
|
1454
|
+
<property name="height">1</property>
|
|
1455
|
+
</packing>
|
|
1456
|
+
</child>
|
|
1457
|
+
<child>
|
|
1458
|
+
<object class="GtkLabel" id="label20">
|
|
1459
|
+
<property name="visible">True</property>
|
|
1460
|
+
<property name="can_focus">False</property>
|
|
1461
|
+
<property name="label" translatable="yes">Outputs</property>
|
|
1462
|
+
</object>
|
|
1463
|
+
<packing>
|
|
1464
|
+
<property name="left_attach">2</property>
|
|
1465
|
+
<property name="top_attach">2</property>
|
|
1466
|
+
<property name="width">2</property>
|
|
1467
|
+
<property name="height">1</property>
|
|
1468
|
+
</packing>
|
|
1469
|
+
</child>
|
|
1470
|
+
</object>
|
|
1471
|
+
<packing>
|
|
1472
|
+
<property name="expand">False</property>
|
|
1473
|
+
<property name="fill">True</property>
|
|
1474
|
+
<property name="position">1</property>
|
|
1475
|
+
</packing>
|
|
1476
|
+
</child>
|
|
1477
|
+
</object>
|
|
1478
|
+
</child>
|
|
1479
|
+
<action-widgets>
|
|
1480
|
+
<action-widget response="0">button9</action-widget>
|
|
1481
|
+
</action-widgets>
|
|
1482
|
+
</object>
|
|
1483
|
+
<object class="GtkWindow" id="tx_window">
|
|
1484
|
+
<property name="can_focus">False</property>
|
|
1485
|
+
<child>
|
|
1486
|
+
<placeholder/>
|
|
1487
|
+
</child>
|
|
1488
|
+
</object>
|
|
1489
|
+
<object class="GtkFileChooserDialog" id="wallet_open_dialog">
|
|
1490
|
+
<property name="can_focus">False</property>
|
|
1491
|
+
<property name="border_width">5</property>
|
|
1492
|
+
<property name="title" translatable="yes">Open wallet</property>
|
|
1493
|
+
<property name="window_position">center-on-parent</property>
|
|
1494
|
+
<property name="type_hint">dialog</property>
|
|
1495
|
+
<signal name="response" handler="on_foobar" swapped="no"/>
|
|
1496
|
+
<child internal-child="vbox">
|
|
1497
|
+
<object class="GtkBox" id="filechooserdialog-vbox1">
|
|
1498
|
+
<property name="can_focus">False</property>
|
|
1499
|
+
<property name="orientation">vertical</property>
|
|
1500
|
+
<property name="spacing">2</property>
|
|
1501
|
+
<child internal-child="action_area">
|
|
1502
|
+
<object class="GtkButtonBox" id="filechooserdialog-action_area1">
|
|
1503
|
+
<property name="can_focus">False</property>
|
|
1504
|
+
<property name="layout_style">end</property>
|
|
1505
|
+
<child>
|
|
1506
|
+
<object class="GtkButton" id="button1">
|
|
1507
|
+
<property name="label">gtk-cancel</property>
|
|
1508
|
+
<property name="use_action_appearance">False</property>
|
|
1509
|
+
<property name="visible">True</property>
|
|
1510
|
+
<property name="can_focus">True</property>
|
|
1511
|
+
<property name="receives_default">True</property>
|
|
1512
|
+
<property name="use_action_appearance">False</property>
|
|
1513
|
+
<property name="use_stock">True</property>
|
|
1514
|
+
<signal name="clicked" handler="on_wallet_open_cancel" swapped="no"/>
|
|
1515
|
+
</object>
|
|
1516
|
+
<packing>
|
|
1517
|
+
<property name="expand">False</property>
|
|
1518
|
+
<property name="fill">True</property>
|
|
1519
|
+
<property name="position">0</property>
|
|
1520
|
+
</packing>
|
|
1521
|
+
</child>
|
|
1522
|
+
<child>
|
|
1523
|
+
<object class="GtkButton" id="button2">
|
|
1524
|
+
<property name="label">gtk-apply</property>
|
|
1525
|
+
<property name="use_action_appearance">False</property>
|
|
1526
|
+
<property name="visible">True</property>
|
|
1527
|
+
<property name="can_focus">True</property>
|
|
1528
|
+
<property name="receives_default">True</property>
|
|
1529
|
+
<property name="use_action_appearance">False</property>
|
|
1530
|
+
<property name="use_stock">True</property>
|
|
1531
|
+
<signal name="clicked" handler="on_wallet_open" swapped="no"/>
|
|
1532
|
+
</object>
|
|
1533
|
+
<packing>
|
|
1534
|
+
<property name="expand">False</property>
|
|
1535
|
+
<property name="fill">True</property>
|
|
1536
|
+
<property name="position">1</property>
|
|
1537
|
+
</packing>
|
|
1538
|
+
</child>
|
|
1539
|
+
</object>
|
|
1540
|
+
<packing>
|
|
1541
|
+
<property name="expand">False</property>
|
|
1542
|
+
<property name="fill">True</property>
|
|
1543
|
+
<property name="pack_type">end</property>
|
|
1544
|
+
<property name="position">0</property>
|
|
1545
|
+
</packing>
|
|
1546
|
+
</child>
|
|
1547
|
+
<child>
|
|
1548
|
+
<object class="GtkLabel" id="label1">
|
|
1549
|
+
<property name="visible">True</property>
|
|
1550
|
+
<property name="can_focus">False</property>
|
|
1551
|
+
<property name="label" translatable="yes">Select a wallet file</property>
|
|
1552
|
+
</object>
|
|
1553
|
+
<packing>
|
|
1554
|
+
<property name="expand">False</property>
|
|
1555
|
+
<property name="fill">True</property>
|
|
1556
|
+
<property name="position">2</property>
|
|
1557
|
+
</packing>
|
|
1558
|
+
</child>
|
|
1559
|
+
</object>
|
|
1560
|
+
</child>
|
|
1561
|
+
<action-widgets>
|
|
1562
|
+
<action-widget response="0">button1</action-widget>
|
|
1563
|
+
<action-widget response="1">button2</action-widget>
|
|
1564
|
+
</action-widgets>
|
|
1565
|
+
</object>
|
|
1566
|
+
<object class="GtkFileChooserDialog" id="wallet_save_dialog">
|
|
1567
|
+
<property name="can_focus">False</property>
|
|
1568
|
+
<property name="border_width">5</property>
|
|
1569
|
+
<property name="title" translatable="yes">Save wallet</property>
|
|
1570
|
+
<property name="type_hint">dialog</property>
|
|
1571
|
+
<property name="action">save</property>
|
|
1572
|
+
<signal name="update-preview" handler="on_wallet_save_dialog_update_preview" swapped="no"/>
|
|
1573
|
+
<child internal-child="vbox">
|
|
1574
|
+
<object class="GtkBox" id="filechooserdialog-vbox2">
|
|
1575
|
+
<property name="can_focus">False</property>
|
|
1576
|
+
<property name="orientation">vertical</property>
|
|
1577
|
+
<property name="spacing">2</property>
|
|
1578
|
+
<child internal-child="action_area">
|
|
1579
|
+
<object class="GtkButtonBox" id="filechooserdialog-action_area2">
|
|
1580
|
+
<property name="can_focus">False</property>
|
|
1581
|
+
<property name="layout_style">end</property>
|
|
1582
|
+
<child>
|
|
1583
|
+
<object class="GtkButton" id="button3">
|
|
1584
|
+
<property name="label">gtk-cancel</property>
|
|
1585
|
+
<property name="use_action_appearance">False</property>
|
|
1586
|
+
<property name="visible">True</property>
|
|
1587
|
+
<property name="can_focus">True</property>
|
|
1588
|
+
<property name="receives_default">True</property>
|
|
1589
|
+
<property name="use_action_appearance">False</property>
|
|
1590
|
+
<property name="use_stock">True</property>
|
|
1591
|
+
<signal name="clicked" handler="on_wallet_save_cancel" swapped="no"/>
|
|
1592
|
+
</object>
|
|
1593
|
+
<packing>
|
|
1594
|
+
<property name="expand">False</property>
|
|
1595
|
+
<property name="fill">True</property>
|
|
1596
|
+
<property name="position">0</property>
|
|
1597
|
+
</packing>
|
|
1598
|
+
</child>
|
|
1599
|
+
<child>
|
|
1600
|
+
<object class="GtkButton" id="button4">
|
|
1601
|
+
<property name="label">gtk-apply</property>
|
|
1602
|
+
<property name="use_action_appearance">False</property>
|
|
1603
|
+
<property name="visible">True</property>
|
|
1604
|
+
<property name="can_focus">True</property>
|
|
1605
|
+
<property name="receives_default">True</property>
|
|
1606
|
+
<property name="use_action_appearance">False</property>
|
|
1607
|
+
<property name="use_stock">True</property>
|
|
1608
|
+
<signal name="clicked" handler="on_wallet_save" swapped="no"/>
|
|
1609
|
+
</object>
|
|
1610
|
+
<packing>
|
|
1611
|
+
<property name="expand">False</property>
|
|
1612
|
+
<property name="fill">True</property>
|
|
1613
|
+
<property name="position">1</property>
|
|
1614
|
+
</packing>
|
|
1615
|
+
</child>
|
|
1616
|
+
</object>
|
|
1617
|
+
<packing>
|
|
1618
|
+
<property name="expand">False</property>
|
|
1619
|
+
<property name="fill">True</property>
|
|
1620
|
+
<property name="pack_type">end</property>
|
|
1621
|
+
<property name="position">0</property>
|
|
1622
|
+
</packing>
|
|
1623
|
+
</child>
|
|
1624
|
+
<child>
|
|
1625
|
+
<object class="GtkLabel" id="label3">
|
|
1626
|
+
<property name="visible">True</property>
|
|
1627
|
+
<property name="can_focus">False</property>
|
|
1628
|
+
<property name="label" translatable="yes">Choose a filename to save your wallet</property>
|
|
1629
|
+
</object>
|
|
1630
|
+
<packing>
|
|
1631
|
+
<property name="expand">False</property>
|
|
1632
|
+
<property name="fill">True</property>
|
|
1633
|
+
<property name="position">2</property>
|
|
1634
|
+
</packing>
|
|
1635
|
+
</child>
|
|
1636
|
+
</object>
|
|
1637
|
+
</child>
|
|
1638
|
+
<action-widgets>
|
|
1639
|
+
<action-widget response="0">button3</action-widget>
|
|
1640
|
+
<action-widget response="1">button4</action-widget>
|
|
1641
|
+
</action-widgets>
|
|
1642
|
+
</object>
|
|
1643
|
+
</interface>
|