Commit 916d4d48ce086f9ebd9f0e0e7840da15b1f60351

Authored by Marius Hanne
1 parent 407fd306fd

wallet callbacks / node connection / gui stuff

Showing 11 changed files with 1367 additions and 256 deletions Side-by-side Diff

lib/bitcoin/gui/addr_view.rb
  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 + embed(:addr_view)
  10 + end
  11 +
  12 + def update addrs
  13 + @model.clear
  14 + addrs.each do |addr, balance|
  15 + row = @model.append(nil)
  16 + @model.set_value(row, 0, addr[:addr])
  17 + @model.set_value(row, 1, addr[:label] || "")
  18 + @model.set_value(row, 2, balance.to_s)
  19 +
  20 + @gui.storage.get_txouts_for_address(addr[:addr]).each do |txout|
  21 + tx_row = @model.append(row)
  22 + @model.set_value(tx_row, 0, txout.get_tx.hash)
  23 + @model.set_value(tx_row, 2, txout.value.to_s)
  24 + end
  25 + end
  26 + @view.set_model @model
  27 + end
  28 +
  29 + end
  30 +end
lib/bitcoin/gui/conn_view.rb
  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 + embed(:conn_view)
  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
lib/bitcoin/gui/connection.rb
... ... @@ -12,7 +12,7 @@
12 12  
13 13 def initialize host, port, gui
14 14 @gui = gui
15   - client = Bitcoin::Network::CommandClient.connect(host, port, gui) do
  15 + @gui.node = Bitcoin::Network::CommandClient.connect(host, port, gui) do
16 16  
17 17 on_connected do
18 18 request :info
19 19  
20 20  
21 21  
... ... @@ -32,33 +32,17 @@
32 32  
33 33 on_connection do |state, data|
34 34 if state == "connected"
35   - row = gui.conn_store.append(nil)
36   - gui do
37   - data.each_with_index do |pair, i|
38   - conn_store.set_value(row, i, pair[1] || "")
39   - end
40   - end
  35 + gui.conn_view.connected(data)
41 36 elsif state == "disconnected"
42   - gui do
43   - valid, i = conn_store.get_iter_first
44   - while valid
45   - host = conn_store.get_value(i, 0).get_string
46   - port = conn_store.get_value(i, 1).get_int
47   - if host == data[0] && port == data[1]
48   - conn_store.remove(i)
49   - break
50   - end
51   - valid = conn_store.iter_next(i.to_ptr)
52   - end
53   - end
  37 + gui.conn_view.disconnected(data)
54 38 end
55 39  
56 40 gui do
57 41 size = 0
58   - v, i = conn_store.get_iter_first
  42 + v, i = conn_view.model.get_iter_first
59 43 while v
60 44 size += 1
61   - v = conn_store.iter_next(i.to_ptr)
  45 + v = conn_view.model.iter_next(i.to_ptr)
62 46 end
63 47  
64 48 p = notebook.get_nth_page(2)
lib/bitcoin/gui/gui.builder
Diff suppressed. Click to show
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <interface>
3 3 <!-- interface-requires gtk+ 3.0 -->
  4 + <object class="GtkAction" id="action_exit">
  5 + <property name="label" translatable="yes">aaa</property>
  6 + <signal name="activate" handler="on_exit" swapped="no"/>
  7 + </object>
4 8 <object class="GtkAboutDialog" id="about_dialog">
5 9 <property name="can_focus">False</property>
6 10 <property name="border_width">5</property>
... ... @@ -61,39 +65,6 @@
61 65 <object class="GtkAccelGroup" id="accelgroup1">
62 66 <signal name="accel-activate" handler="on_accel_activate" swapped="no"/>
63 67 </object>
64   - <object class="GtkDialog" id="dialog1">
65   - <property name="can_focus">False</property>
66   - <property name="border_width">5</property>
67   - <property name="type_hint">desktop</property>
68   - <child internal-child="vbox">
69   - <object class="GtkBox" id="dialog-vbox2">
70   - <property name="can_focus">False</property>
71   - <property name="orientation">vertical</property>
72   - <property name="spacing">2</property>
73   - <child internal-child="action_area">
74   - <object class="GtkButtonBox" id="dialog-action_area2">
75   - <property name="can_focus">False</property>
76   - <property name="layout_style">end</property>
77   - <child>
78   - <placeholder/>
79   - </child>
80   - <child>
81   - <placeholder/>
82   - </child>
83   - </object>
84   - <packing>
85   - <property name="expand">False</property>
86   - <property name="fill">True</property>
87   - <property name="pack_type">end</property>
88   - <property name="position">0</property>
89   - </packing>
90   - </child>
91   - <child>
92   - <placeholder/>
93   - </child>
94   - </object>
95   - </child>
96   - </object>
97 68 <object class="GtkImage" id="image_new_addr">
98 69 <property name="visible">True</property>
99 70 <property name="can_focus">False</property>
... ... @@ -106,6 +77,7 @@
106 77 </object>
107 78 <object class="GtkWindow" id="main_window">
108 79 <property name="can_focus">False</property>
  80 + <property name="title" translatable="yes">Bitcoin-Ruby GUI</property>
109 81 <accel-groups>
110 82 <group name="accelgroup1"/>
111 83 </accel-groups>
112 84  
113 85  
114 86  
... ... @@ -161,11 +133,13 @@
161 133 </child>
162 134 <child>
163 135 <object class="GtkImageMenuItem" id="menu_file_quit">
  136 + <property name="label">gtk-quit</property>
164 137 <property name="use_action_appearance">False</property>
  138 + <property name="related_action">action_exit</property>
165 139 <property name="visible">True</property>
166 140 <property name="can_focus">False</property>
  141 + <property name="use_underline">True</property>
167 142 <property name="use_stock">True</property>
168   - <property name="accel_group">accelgroup1</property>
169 143 <signal name="activate" handler="on_exit" swapped="no"/>
170 144 </object>
171 145 </child>
... ... @@ -205,6 +179,24 @@
205 179 <property name="use_stock">True</property>
206 180 </object>
207 181 </child>
  182 + <child>
  183 + <object class="GtkSeparatorMenuItem" id="separatormenuitem2">
  184 + <property name="use_action_appearance">False</property>
  185 + <property name="visible">True</property>
  186 + <property name="can_focus">False</property>
  187 + </object>
  188 + </child>
  189 + <child>
  190 + <object class="GtkImageMenuItem" id="menu_edit_preferences">
  191 + <property name="label">gtk-preferences</property>
  192 + <property name="use_action_appearance">False</property>
  193 + <property name="visible">True</property>
  194 + <property name="can_focus">False</property>
  195 + <property name="use_underline">True</property>
  196 + <property name="use_stock">True</property>
  197 + <signal name="activate" handler="on_preferences" swapped="no"/>
  198 + </object>
  199 + </child>
208 200 </object>
209 201 </child>
210 202 </object>
211 203  
... ... @@ -235,8 +227,8 @@
235 227 <property name="use_action_appearance">False</property>
236 228 <property name="visible">True</property>
237 229 <property name="can_focus">False</property>
238   - <property name="use_underline">True</property>
239 230 <property name="use_stock">True</property>
  231 + <property name="accel_group">accelgroup1</property>
240 232 <signal name="activate" handler="on_about" swapped="no"/>
241 233 </object>
242 234 </child>
... ... @@ -261,7 +253,7 @@
261 253 <property name="can_focus">True</property>
262 254 <property name="shadow_type">in</property>
263 255 <child>
264   - <object class="GtkTreeView" id="address_view">
  256 + <object class="GtkTreeView" id="addr_view">
265 257 <property name="visible">True</property>
266 258 <property name="can_focus">True</property>
267 259 <property name="enable_grid_lines">both</property>
... ... @@ -291,7 +283,7 @@
291 283 <property name="can_focus">True</property>
292 284 <property name="shadow_type">in</property>
293 285 <child>
294   - <object class="GtkTreeView" id="transactions_view">
  286 + <object class="GtkTreeView" id="tx_view">
295 287 <property name="visible">True</property>
296 288 <property name="can_focus">True</property>
297 289 <child internal-child="selection">
... ... @@ -322,7 +314,7 @@
322 314 <property name="can_focus">True</property>
323 315 <property name="shadow_type">in</property>
324 316 <child>
325   - <object class="GtkTreeView" id="connections_view">
  317 + <object class="GtkTreeView" id="conn_view">
326 318 <property name="visible">True</property>
327 319 <property name="can_focus">True</property>
328 320 <child internal-child="selection">
... ... @@ -347,6 +339,12 @@
347 339 <property name="tab_fill">False</property>
348 340 </packing>
349 341 </child>
  342 + <child>
  343 + <placeholder/>
  344 + </child>
  345 + <child type="tab">
  346 + <placeholder/>
  347 + </child>
350 348 </object>
351 349 <packing>
352 350 <property name="expand">True</property>
... ... @@ -355,7 +353,7 @@
355 353 </packing>
356 354 </child>
357 355 <child>
358   - <object class="GtkButtonBox" id="buttonbox1">
  356 + <object class="GtkButtonBox" id="buttonbar">
359 357 <property name="visible">True</property>
360 358 <property name="can_focus">False</property>
361 359 <property name="homogeneous">True</property>
... ... @@ -386,6 +384,7 @@
386 384 <property name="receives_default">True</property>
387 385 <property name="use_action_appearance">False</property>
388 386 <property name="image">image_new_tx</property>
  387 + <signal name="clicked" handler="on_new_tx" swapped="no"/>
389 388 </object>
390 389 <packing>
391 390 <property name="expand">False</property>
... ... @@ -393,6 +392,9 @@
393 392 <property name="position">1</property>
394 393 </packing>
395 394 </child>
  395 + <child>
  396 + <placeholder/>
  397 + </child>
396 398 </object>
397 399 <packing>
398 400 <property name="expand">False</property>
399 401  
... ... @@ -570,12 +572,13 @@
570 572 <action-widgets>
571 573 <action-widget response="-1">message_dialog_button_no</action-widget>
572 574 <action-widget response="1">message_dialog_button_yes</action-widget>
573   - <action-widget response="0">message_dialog_button_ok</action-widget>
  575 + <action-widget response="1">message_dialog_button_ok</action-widget>
574 576 </action-widgets>
575 577 </object>
576 578 <object class="GtkDialog" id="new_addr_dialog">
577 579 <property name="can_focus">False</property>
578 580 <property name="border_width">5</property>
  581 + <property name="title" translatable="yes">New Address</property>
579 582 <property name="type_hint">dialog</property>
580 583 <child internal-child="vbox">
581 584 <object class="GtkBox" id="dialog-vbox1">
582 585  
583 586  
... ... @@ -629,14 +632,13 @@
629 632 </packing>
630 633 </child>
631 634 <child>
632   - <object class="GtkGrid" id="grid1">
  635 + <object class="GtkGrid" id="grid8">
633 636 <property name="visible">True</property>
634 637 <property name="can_focus">False</property>
635 638 <child>
636   - <object class="GtkLabel" id="label2">
  639 + <object class="GtkLabel" id="label22">
637 640 <property name="visible">True</property>
638 641 <property name="can_focus">False</property>
639   - <property name="margin_right">20</property>
640 642 <property name="label" translatable="yes">Label</property>
641 643 </object>
642 644 <packing>
643 645  
... ... @@ -650,10 +652,8 @@
650 652 <object class="GtkEntry" id="new_addr_entry_label">
651 653 <property name="visible">True</property>
652 654 <property name="can_focus">True</property>
653   - <property name="hexpand">True</property>
654 655 <property name="invisible_char">●</property>
655   - <property name="width_chars">0</property>
656   - <property name="shadow_type">none</property>
  656 + <property name="invisible_char_set">True</property>
657 657 </object>
658 658 <packing>
659 659 <property name="left_attach">1</property>
660 660  
661 661  
662 662  
663 663  
664 664  
665 665  
666 666  
667 667  
668 668  
669 669  
... ... @@ -663,39 +663,796 @@
663 663 </packing>
664 664 </child>
665 665 <child>
666   - <placeholder/>
  666 + <object class="GtkCheckButton" id="new_addr_check_addr">
  667 + <property name="label" translatable="yes">Address</property>
  668 + <property name="use_action_appearance">False</property>
  669 + <property name="visible">True</property>
  670 + <property name="can_focus">True</property>
  671 + <property name="receives_default">False</property>
  672 + <property name="use_action_appearance">False</property>
  673 + <property name="xalign">0</property>
  674 + <property name="draw_indicator">True</property>
  675 + </object>
  676 + <packing>
  677 + <property name="left_attach">0</property>
  678 + <property name="top_attach">1</property>
  679 + <property name="width">1</property>
  680 + <property name="height">1</property>
  681 + </packing>
667 682 </child>
668 683 <child>
669   - <placeholder/>
  684 + <object class="GtkEntry" id="new_addr_entry_addr">
  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">1</property>
  693 + <property name="width">1</property>
  694 + <property name="height">1</property>
  695 + </packing>
670 696 </child>
671 697 <child>
672   - <placeholder/>
  698 + <object class="GtkCheckButton" id="new_addr_check_pubkey">
  699 + <property name="label" translatable="yes">Pubkey</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">2</property>
  711 + <property name="width">1</property>
  712 + <property name="height">1</property>
  713 + </packing>
673 714 </child>
674 715 <child>
675   - <placeholder/>
  716 + <object class="GtkEntry" id="new_addr_entry_pubkey">
  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">2</property>
  725 + <property name="width">1</property>
  726 + <property name="height">1</property>
  727 + </packing>
676 728 </child>
677 729 <child>
678   - <placeholder/>
  730 + <object class="GtkCheckButton" id="new_addr_check_mine">
  731 + <property name="label" translatable="yes">Mine</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="active">True</property>
  739 + <property name="draw_indicator">True</property>
  740 + </object>
  741 + <packing>
  742 + <property name="left_attach">0</property>
  743 + <property name="top_attach">3</property>
  744 + <property name="width">1</property>
  745 + <property name="height">1</property>
  746 + </packing>
679 747 </child>
680 748 <child>
681 749 <placeholder/>
682 750 </child>
  751 + </object>
  752 + <packing>
  753 + <property name="expand">False</property>
  754 + <property name="fill">True</property>
  755 + <property name="position">1</property>
  756 + </packing>
  757 + </child>
  758 + </object>
  759 + </child>
  760 + <action-widgets>
  761 + <action-widget response="0">new_addr_dialog_cancel</action-widget>
  762 + <action-widget response="1">new_addr_dialog_apply</action-widget>
  763 + </action-widgets>
  764 + </object>
  765 + <object class="GtkDialog" id="new_tx_dialog">
  766 + <property name="can_focus">False</property>
  767 + <property name="border_width">5</property>
  768 + <property name="title" translatable="yes">New Transaction</property>
  769 + <property name="type_hint">dialog</property>
  770 + <child internal-child="vbox">
  771 + <object class="GtkBox" id="dialog-vbox3">
  772 + <property name="can_focus">False</property>
  773 + <property name="orientation">vertical</property>
  774 + <property name="spacing">2</property>
  775 + <child internal-child="action_area">
  776 + <object class="GtkButtonBox" id="dialog-action_area3">
  777 + <property name="can_focus">False</property>
  778 + <property name="layout_style">end</property>
683 779 <child>
  780 + <object class="GtkButton" id="button5">
  781 + <property name="label">gtk-cancel</property>
  782 + <property name="use_action_appearance">False</property>
  783 + <property name="visible">True</property>
  784 + <property name="can_focus">True</property>
  785 + <property name="receives_default">True</property>
  786 + <property name="use_action_appearance">False</property>
  787 + <property name="use_stock">True</property>
  788 + </object>
  789 + <packing>
  790 + <property name="expand">False</property>
  791 + <property name="fill">True</property>
  792 + <property name="position">0</property>
  793 + </packing>
  794 + </child>
  795 + <child>
  796 + <object class="GtkButton" id="button6">
  797 + <property name="label">gtk-apply</property>
  798 + <property name="use_action_appearance">False</property>
  799 + <property name="visible">True</property>
  800 + <property name="can_focus">True</property>
  801 + <property name="receives_default">True</property>
  802 + <property name="use_action_appearance">False</property>
  803 + <property name="use_stock">True</property>
  804 + </object>
  805 + <packing>
  806 + <property name="expand">False</property>
  807 + <property name="fill">True</property>
  808 + <property name="position">1</property>
  809 + </packing>
  810 + </child>
  811 + </object>
  812 + <packing>
  813 + <property name="expand">False</property>
  814 + <property name="fill">True</property>
  815 + <property name="pack_type">end</property>
  816 + <property name="position">0</property>
  817 + </packing>
  818 + </child>
  819 + <child>
  820 + <object class="GtkGrid" id="grid2">
  821 + <property name="visible">True</property>
  822 + <property name="can_focus">False</property>
  823 + <child>
  824 + <object class="GtkLabel" id="label4">
  825 + <property name="visible">True</property>
  826 + <property name="can_focus">False</property>
  827 + <property name="label" translatable="yes">Recipient</property>
  828 + </object>
  829 + <packing>
  830 + <property name="left_attach">0</property>
  831 + <property name="top_attach">0</property>
  832 + <property name="width">1</property>
  833 + <property name="height">1</property>
  834 + </packing>
  835 + </child>
  836 + <child>
  837 + <object class="GtkLabel" id="label5">
  838 + <property name="visible">True</property>
  839 + <property name="can_focus">False</property>
  840 + <property name="label" translatable="yes">Amount</property>
  841 + </object>
  842 + <packing>
  843 + <property name="left_attach">0</property>
  844 + <property name="top_attach">1</property>
  845 + <property name="width">1</property>
  846 + <property name="height">1</property>
  847 + </packing>
  848 + </child>
  849 + <child>
  850 + <object class="GtkEntry" id="new_tx_entry_address">
  851 + <property name="visible">True</property>
  852 + <property name="can_focus">True</property>
  853 + <property name="invisible_char">●</property>
  854 + </object>
  855 + <packing>
  856 + <property name="left_attach">1</property>
  857 + <property name="top_attach">0</property>
  858 + <property name="width">1</property>
  859 + <property name="height">1</property>
  860 + </packing>
  861 + </child>
  862 + <child>
  863 + <object class="GtkEntry" id="new_tx_entry_amount">
  864 + <property name="visible">True</property>
  865 + <property name="can_focus">True</property>
  866 + <property name="invisible_char">●</property>
  867 + </object>
  868 + <packing>
  869 + <property name="left_attach">1</property>
  870 + <property name="top_attach">1</property>
  871 + <property name="width">1</property>
  872 + <property name="height">1</property>
  873 + </packing>
  874 + </child>
  875 + </object>
  876 + <packing>
  877 + <property name="expand">False</property>
  878 + <property name="fill">True</property>
  879 + <property name="position">1</property>
  880 + </packing>
  881 + </child>
  882 + </object>
  883 + </child>
  884 + <action-widgets>
  885 + <action-widget response="0">button5</action-widget>
  886 + <action-widget response="1">button6</action-widget>
  887 + </action-widgets>
  888 + </object>
  889 + <object class="GtkEntryCompletion" id="new_tx_recipient_completion"/>
  890 + <object class="GtkMenu" id="popup_menu">
  891 + <property name="visible">True</property>
  892 + <property name="can_focus">False</property>
  893 + <child>
  894 + <object class="GtkImageMenuItem" id="menu_popup_quit">
  895 + <property name="label">gtk-quit</property>
  896 + <property name="use_action_appearance">False</property>
  897 + <property name="related_action">action_exit</property>
  898 + <property name="visible">True</property>
  899 + <property name="can_focus">False</property>
  900 + <property name="use_underline">True</property>
  901 + <property name="use_stock">True</property>
  902 + </object>
  903 + </child>
  904 + </object>
  905 + <object class="GtkDialog" id="preferences_dialog">
  906 + <property name="can_focus">False</property>
  907 + <property name="border_width">5</property>
  908 + <property name="title" translatable="yes">Preferences</property>
  909 + <property name="type_hint">dialog</property>
  910 + <child internal-child="vbox">
  911 + <object class="GtkBox" id="dialog-vbox4">
  912 + <property name="can_focus">False</property>
  913 + <property name="orientation">vertical</property>
  914 + <property name="spacing">2</property>
  915 + <child internal-child="action_area">
  916 + <object class="GtkButtonBox" id="dialog-action_area4">
  917 + <property name="can_focus">False</property>
  918 + <property name="layout_style">end</property>
  919 + <child>
  920 + <object class="GtkButton" id="button7">
  921 + <property name="label">gtk-cancel</property>
  922 + <property name="use_action_appearance">False</property>
  923 + <property name="visible">True</property>
  924 + <property name="can_focus">True</property>
  925 + <property name="receives_default">True</property>
  926 + <property name="use_action_appearance">False</property>
  927 + <property name="use_stock">True</property>
  928 + </object>
  929 + <packing>
  930 + <property name="expand">False</property>
  931 + <property name="fill">True</property>
  932 + <property name="position">0</property>
  933 + </packing>
  934 + </child>
  935 + <child>
  936 + <object class="GtkButton" id="button8">
  937 + <property name="label">gtk-save</property>
  938 + <property name="use_action_appearance">False</property>
  939 + <property name="visible">True</property>
  940 + <property name="can_focus">True</property>
  941 + <property name="receives_default">True</property>
  942 + <property name="use_action_appearance">False</property>
  943 + <property name="use_stock">True</property>
  944 + </object>
  945 + <packing>
  946 + <property name="expand">False</property>
  947 + <property name="fill">True</property>
  948 + <property name="position">1</property>
  949 + </packing>
  950 + </child>
  951 + </object>
  952 + <packing>
  953 + <property name="expand">False</property>
  954 + <property name="fill">True</property>
  955 + <property name="pack_type">end</property>
  956 + <property name="position">0</property>
  957 + </packing>
  958 + </child>
  959 + <child>
  960 + <object class="GtkNotebook" id="notebook1">
  961 + <property name="visible">True</property>
  962 + <property name="can_focus">True</property>
  963 + <property name="tab_pos">left</property>
  964 + <child>
  965 + <object class="GtkGrid" id="grid3">
  966 + <property name="visible">True</property>
  967 + <property name="can_focus">False</property>
  968 + <child>
  969 + <object class="GtkLabel" id="label9">
  970 + <property name="visible">True</property>
  971 + <property name="can_focus">False</property>
  972 + <property name="label" translatable="yes">Network</property>
  973 + </object>
  974 + <packing>
  975 + <property name="left_attach">0</property>
  976 + <property name="top_attach">0</property>
  977 + <property name="width">1</property>
  978 + <property name="height">1</property>
  979 + </packing>
  980 + </child>
  981 + <child>
  982 + <object class="GtkLabel" id="label10">
  983 + <property name="visible">True</property>
  984 + <property name="can_focus">False</property>
  985 + <property name="label" translatable="yes">Command Socket</property>
  986 + </object>
  987 + <packing>
  988 + <property name="left_attach">0</property>
  989 + <property name="top_attach">1</property>
  990 + <property name="width">1</property>
  991 + <property name="height">1</property>
  992 + </packing>
  993 + </child>
  994 + <child>
  995 + <object class="GtkLabel" id="label11">
  996 + <property name="visible">True</property>
  997 + <property name="can_focus">False</property>
  998 + <property name="label" translatable="yes">Listen Socket</property>
  999 + </object>
  1000 + <packing>
  1001 + <property name="left_attach">0</property>
  1002 + <property name="top_attach">2</property>
  1003 + <property name="width">1</property>
  1004 + <property name="height">1</property>
  1005 + </packing>
  1006 + </child>
  1007 + <child>
  1008 + <object class="GtkEntry" id="preferences_entry_command">
  1009 + <property name="visible">True</property>
  1010 + <property name="can_focus">True</property>
  1011 + <property name="invisible_char">●</property>
  1012 + </object>
  1013 + <packing>
  1014 + <property name="left_attach">1</property>
  1015 + <property name="top_attach">1</property>
  1016 + <property name="width">1</property>
  1017 + <property name="height">1</property>
  1018 + </packing>
  1019 + </child>
  1020 + <child>
  1021 + <object class="GtkEntry" id="preferences_entry_listen">
  1022 + <property name="visible">True</property>
  1023 + <property name="can_focus">True</property>
  1024 + <property name="invisible_char">●</property>
  1025 + </object>
  1026 + <packing>
  1027 + <property name="left_attach">1</property>
  1028 + <property name="top_attach">2</property>
  1029 + <property name="width">1</property>
  1030 + <property name="height">1</property>
  1031 + </packing>
  1032 + </child>
  1033 + <child>
  1034 + <object class="GtkEntry" id="preferences_entry_network">
  1035 + <property name="visible">True</property>
  1036 + <property name="can_focus">True</property>
  1037 + <property name="invisible_char">●</property>
  1038 + </object>
  1039 + <packing>
  1040 + <property name="left_attach">1</property>
  1041 + <property name="top_attach">0</property>
  1042 + <property name="width">1</property>
  1043 + <property name="height">1</property>
  1044 + </packing>
  1045 + </child>
  1046 + <child>
  1047 + <object class="GtkLabel" id="label17">
  1048 + <property name="visible">True</property>
  1049 + <property name="can_focus">False</property>
  1050 + <property name="label" translatable="yes">Storage Backend</property>
  1051 + </object>
  1052 + <packing>
  1053 + <property name="left_attach">0</property>
  1054 + <property name="top_attach">3</property>
  1055 + <property name="width">1</property>
  1056 + <property name="height">1</property>
  1057 + </packing>
  1058 + </child>
  1059 + <child>
  1060 + <object class="GtkComboBox" id="combobox2">
  1061 + <property name="visible">True</property>
  1062 + <property name="can_focus">False</property>
  1063 + </object>
  1064 + <packing>
  1065 + <property name="left_attach">1</property>
  1066 + <property name="top_attach">3</property>
  1067 + <property name="width">1</property>
  1068 + <property name="height">1</property>
  1069 + </packing>
  1070 + </child>
  1071 + </object>
  1072 + </child>
  1073 + <child type="tab">
  1074 + <object class="GtkLabel" id="label6">
  1075 + <property name="visible">True</property>
  1076 + <property name="can_focus">False</property>
  1077 + <property name="label" translatable="yes">General</property>
  1078 + </object>
  1079 + <packing>
  1080 + <property name="tab_fill">False</property>
  1081 + </packing>
  1082 + </child>
  1083 + <child>
  1084 + <object class="GtkGrid" id="grid4">
  1085 + <property name="visible">True</property>
  1086 + <property name="can_focus">False</property>
  1087 + <child>
  1088 + <object class="GtkLabel" id="label12">
  1089 + <property name="visible">True</property>
  1090 + <property name="can_focus">False</property>
  1091 + <property name="label" translatable="yes">Headers Only</property>
  1092 + </object>
  1093 + <packing>
  1094 + <property name="left_attach">0</property>
  1095 + <property name="top_attach">0</property>
  1096 + <property name="width">1</property>
  1097 + <property name="height">1</property>
  1098 + </packing>
  1099 + </child>
  1100 + <child>
  1101 + <object class="GtkLabel" id="label13">
  1102 + <property name="visible">True</property>
  1103 + <property name="can_focus">False</property>
  1104 + <property name="label" translatable="yes">DNS</property>
  1105 + </object>
  1106 + <packing>
  1107 + <property name="left_attach">0</property>
  1108 + <property name="top_attach">1</property>
  1109 + <property name="width">1</property>
  1110 + <property name="height">1</property>
  1111 + </packing>
  1112 + </child>
  1113 + <child>
  1114 + <object class="GtkLabel" id="label14">
  1115 + <property name="visible">True</property>
  1116 + <property name="can_focus">False</property>
  1117 + </object>
  1118 + <packing>
  1119 + <property name="left_attach">0</property>
  1120 + <property name="top_attach">2</property>
  1121 + <property name="width">1</property>
  1122 + <property name="height">1</property>
  1123 + </packing>
  1124 + </child>
  1125 + <child>
  1126 + <object class="GtkSwitch" id="switch1">
  1127 + <property name="use_action_appearance">False</property>
  1128 + <property name="visible">True</property>
  1129 + <property name="can_focus">True</property>
  1130 + <property name="use_action_appearance">False</property>
  1131 + </object>
  1132 + <packing>
  1133 + <property name="left_attach">1</property>
  1134 + <property name="top_attach">0</property>
  1135 + <property name="width">1</property>
  1136 + <property name="height">1</property>
  1137 + </packing>
  1138 + </child>
  1139 + <child>
  1140 + <object class="GtkSwitch" id="switch2">
  1141 + <property name="use_action_appearance">False</property>
  1142 + <property name="visible">True</property>
  1143 + <property name="can_focus">True</property>
  1144 + <property name="use_action_appearance">False</property>
  1145 + </object>
  1146 + <packing>
  1147 + <property name="left_attach">1</property>
  1148 + <property name="top_attach">1</property>
  1149 + <property name="width">1</property>
  1150 + <property name="height">1</property>
  1151 + </packing>
  1152 + </child>
  1153 + <child>
  1154 + <placeholder/>
  1155 + </child>
  1156 + </object>
  1157 + <packing>
  1158 + <property name="position">1</property>
  1159 + </packing>
  1160 + </child>
  1161 + <child type="tab">
  1162 + <object class="GtkLabel" id="label7">
  1163 + <property name="visible">True</property>
  1164 + <property name="can_focus">False</property>
  1165 + <property name="label" translatable="yes">Node</property>
  1166 + </object>
  1167 + <packing>
  1168 + <property name="position">1</property>
  1169 + <property name="tab_fill">False</property>
  1170 + </packing>
  1171 + </child>
  1172 + <child>
  1173 + <object class="GtkGrid" id="grid5">
  1174 + <property name="visible">True</property>
  1175 + <property name="can_focus">False</property>
  1176 + <child>
  1177 + <object class="GtkLabel" id="label15">
  1178 + <property name="visible">True</property>
  1179 + <property name="can_focus">False</property>
  1180 + <property name="label" translatable="yes">Backend</property>
  1181 + </object>
  1182 + <packing>
  1183 + <property name="left_attach">0</property>
  1184 + <property name="top_attach">0</property>
  1185 + <property name="width">1</property>
  1186 + <property name="height">1</property>
  1187 + </packing>
  1188 + </child>
  1189 + <child>
  1190 + <object class="GtkLabel" id="label16">
  1191 + <property name="visible">True</property>
  1192 + <property name="can_focus">False</property>
  1193 + <property name="label" translatable="yes">File</property>
  1194 + </object>
  1195 + <packing>
  1196 + <property name="left_attach">1</property>
  1197 + <property name="top_attach">0</property>
  1198 + <property name="width">1</property>
  1199 + <property name="height">1</property>
  1200 + </packing>
  1201 + </child>
  1202 + <child>
  1203 + <object class="GtkComboBox" id="combobox1">
  1204 + <property name="visible">True</property>
  1205 + <property name="can_focus">False</property>
  1206 + </object>
  1207 + <packing>
  1208 + <property name="left_attach">0</property>
  1209 + <property name="top_attach">1</property>
  1210 + <property name="width">1</property>
  1211 + <property name="height">1</property>
  1212 + </packing>
  1213 + </child>
  1214 + <child>
  1215 + <object class="GtkFileChooserButton" id="filechooserbutton1">
  1216 + <property name="visible">True</property>
  1217 + <property name="can_focus">False</property>
  1218 + <property name="orientation">vertical</property>
  1219 + </object>
  1220 + <packing>
  1221 + <property name="left_attach">1</property>
  1222 + <property name="top_attach">1</property>
  1223 + <property name="width">1</property>
  1224 + <property name="height">1</property>
  1225 + </packing>
  1226 + </child>
  1227 + </object>
  1228 + <packing>
  1229 + <property name="position">2</property>
  1230 + </packing>
  1231 + </child>
  1232 + <child type="tab">
  1233 + <object class="GtkLabel" id="label8">
  1234 + <property name="visible">True</property>
  1235 + <property name="can_focus">False</property>
  1236 + <property name="label" translatable="yes">Wallet</property>
  1237 + </object>
  1238 + <packing>
  1239 + <property name="position">2</property>
  1240 + <property name="tab_fill">False</property>
  1241 + </packing>
  1242 + </child>
  1243 + </object>
  1244 + <packing>
  1245 + <property name="expand">False</property>
  1246 + <property name="fill">True</property>
  1247 + <property name="position">1</property>
  1248 + </packing>
  1249 + </child>
  1250 + </object>
  1251 + </child>
  1252 + <action-widgets>
  1253 + <action-widget response="0">button7</action-widget>
  1254 + <action-widget response="0">button8</action-widget>
  1255 + </action-widgets>
  1256 + </object>
  1257 + <object class="GtkStatusIcon" id="statusicon">
  1258 + <property name="stock">gtk-yes</property>
  1259 + </object>
  1260 + <object class="GtkDialog" id="tx_dialog">
  1261 + <property name="can_focus">False</property>
  1262 + <property name="border_width">5</property>
  1263 + <property name="title" translatable="yes">Transaction</property>
  1264 + <property name="type_hint">dialog</property>
  1265 + <child internal-child="vbox">
  1266 + <object class="GtkBox" id="dialog-vbox6">
  1267 + <property name="can_focus">False</property>
  1268 + <property name="orientation">vertical</property>
  1269 + <property name="spacing">2</property>
  1270 + <child internal-child="action_area">
  1271 + <object class="GtkButtonBox" id="dialog-action_area6">
  1272 + <property name="can_focus">False</property>
  1273 + <property name="layout_style">end</property>
  1274 + <child>
684 1275 <placeholder/>
685 1276 </child>
  1277 + <child>
  1278 + <object class="GtkButton" id="button9">
  1279 + <property name="label">gtk-close</property>
  1280 + <property name="use_action_appearance">False</property>
  1281 + <property name="visible">True</property>
  1282 + <property name="can_focus">True</property>
  1283 + <property name="receives_default">True</property>
  1284 + <property name="use_action_appearance">False</property>
  1285 + <property name="use_stock">True</property>
  1286 + </object>
  1287 + <packing>
  1288 + <property name="expand">False</property>
  1289 + <property name="fill">True</property>
  1290 + <property name="position">1</property>
  1291 + </packing>
  1292 + </child>
686 1293 </object>
687 1294 <packing>
688 1295 <property name="expand">False</property>
689 1296 <property name="fill">True</property>
  1297 + <property name="pack_type">end</property>
  1298 + <property name="position">0</property>
  1299 + </packing>
  1300 + </child>
  1301 + <child>
  1302 + <object class="GtkGrid" id="grid6">
  1303 + <property name="visible">True</property>
  1304 + <property name="can_focus">False</property>
  1305 + <child>
  1306 + <object class="GtkLabel" id="tx_label_hash">
  1307 + <property name="visible">True</property>
  1308 + <property name="can_focus">False</property>
  1309 + <property name="label" translatable="yes">label</property>
  1310 + </object>
  1311 + <packing>
  1312 + <property name="left_attach">0</property>
  1313 + <property name="top_attach">0</property>
  1314 + <property name="width">4</property>
  1315 + <property name="height">1</property>
  1316 + </packing>
  1317 + </child>
  1318 + <child>
  1319 + <object class="GtkScrolledWindow" id="scrolledwindow4">
  1320 + <property name="visible">True</property>
  1321 + <property name="can_focus">True</property>
  1322 + <property name="shadow_type">in</property>
  1323 + <child>
  1324 + <object class="GtkTreeView" id="treeview2">
  1325 + <property name="visible">True</property>
  1326 + <property name="can_focus">True</property>
  1327 + <child internal-child="selection">
  1328 + <object class="GtkTreeSelection" id="treeview-selection6"/>
  1329 + </child>
  1330 + </object>
  1331 + </child>
  1332 + </object>
  1333 + <packing>
  1334 + <property name="left_attach">2</property>
  1335 + <property name="top_attach">3</property>
  1336 + <property name="width">2</property>