mastercoin-wallet 0.0.2 → 0.0.3

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.
@@ -0,0 +1,50 @@
1
+ module MastercoinWallet
2
+ class BitcoinOfferWindow < Qt::Dialog
3
+ include Bitcoin::Builder
4
+ include MastercoinWallet::Builder
5
+
6
+ slots 'send_transaction()'
7
+
8
+ def initialize(parent=nil, options)
9
+ super(parent)
10
+
11
+ @ui = Ui_BitcoinOffer.new
12
+ @ui.setupUi(self)
13
+
14
+ @amount_input = findChild(Qt::LineEdit, "amountInput")
15
+ @password_input = findChild(Qt::LineEdit, "passwordInput")
16
+ @address_input = findChild(Qt::LineEdit, "addressInput")
17
+
18
+ @amount_input.text = options[:bitcoin_amount] if options.has_key?(:bitcoin_amount)
19
+ @address_input.text = options[:address] if options.has_key?(:address)
20
+
21
+ @submit = findChild(Qt::PushButton, "submit_button")
22
+
23
+ @amount_input.validator = Qt::DoubleValidator.new(0.00000001, 10000,8, @amount_input)
24
+
25
+ @submit.enabled = true
26
+
27
+ connect(@submit, SIGNAL('clicked()'), self, SLOT('send_transaction()'))
28
+ end
29
+
30
+ def send_transaction
31
+ @amount = @amount_input.text()
32
+ @receiving_address = @address_input.text()
33
+ @password = @password_input.text()
34
+
35
+ unless Bitcoin::valid_address?(@receiving_address)
36
+ Qt::MessageBox.critical(self, tr("Invalid address"),
37
+ tr("Please fill in a valid Bitcoin/Mastercoin address"))
38
+ end
39
+
40
+ unless @receiving_address.empty? || @amount.empty? || @password.empty?
41
+ create_bitcoin_transaction_for(@amount)
42
+ close()
43
+ else
44
+ Qt::MessageBox.critical(self, tr("Invalid form"),
45
+ tr("Please fill in all required inputs"))
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,121 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>BitcoinOffer</class>
4
+ <widget class="QDialog" name="BitcoinOffer">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>534</width>
10
+ <height>238</height>
11
+ </rect>
12
+ </property>
13
+ <property name="windowTitle">
14
+ <string>New Purchase Offer</string>
15
+ </property>
16
+ <widget class="QWidget" name="verticalLayoutWidget">
17
+ <property name="geometry">
18
+ <rect>
19
+ <x>9</x>
20
+ <y>39</y>
21
+ <width>518</width>
22
+ <height>148</height>
23
+ </rect>
24
+ </property>
25
+ <layout class="QVBoxLayout" name="verticalLayout">
26
+ <item>
27
+ <layout class="QGridLayout" name="gridLayout">
28
+ <item row="2" column="1">
29
+ <widget class="QLineEdit" name="passwordInput">
30
+ <property name="echoMode">
31
+ <enum>QLineEdit::Password</enum>
32
+ </property>
33
+ </widget>
34
+ </item>
35
+ <item row="0" column="1">
36
+ <widget class="QLineEdit" name="addressInput">
37
+ <property name="minimumSize">
38
+ <size>
39
+ <width>300</width>
40
+ <height>0</height>
41
+ </size>
42
+ </property>
43
+ <property name="placeholderText">
44
+ <string/>
45
+ </property>
46
+ </widget>
47
+ </item>
48
+ <item row="0" column="0">
49
+ <widget class="QLabel" name="label_2">
50
+ <property name="text">
51
+ <string>Masteroin address</string>
52
+ </property>
53
+ </widget>
54
+ </item>
55
+ <item row="1" column="0">
56
+ <widget class="QLabel" name="label_3">
57
+ <property name="text">
58
+ <string>Amount</string>
59
+ </property>
60
+ </widget>
61
+ </item>
62
+ <item row="2" column="0">
63
+ <widget class="QLabel" name="label_5">
64
+ <property name="text">
65
+ <string>Password</string>
66
+ </property>
67
+ </widget>
68
+ </item>
69
+ <item row="1" column="1">
70
+ <widget class="QLineEdit" name="amountInput">
71
+ <property name="placeholderText">
72
+ <string/>
73
+ </property>
74
+ </widget>
75
+ </item>
76
+ </layout>
77
+ </item>
78
+ </layout>
79
+ </widget>
80
+ <widget class="QLabel" name="label">
81
+ <property name="geometry">
82
+ <rect>
83
+ <x>10</x>
84
+ <y>0</y>
85
+ <width>231</width>
86
+ <height>31</height>
87
+ </rect>
88
+ </property>
89
+ <property name="text">
90
+ <string>&lt;h3&gt;Pay for Purchase Offer&lt;/h3&gt;</string>
91
+ </property>
92
+ </widget>
93
+ <widget class="QPushButton" name="submit_button">
94
+ <property name="enabled">
95
+ <bool>false</bool>
96
+ </property>
97
+ <property name="geometry">
98
+ <rect>
99
+ <x>410</x>
100
+ <y>190</y>
101
+ <width>114</width>
102
+ <height>32</height>
103
+ </rect>
104
+ </property>
105
+ <property name="text">
106
+ <string>Send</string>
107
+ </property>
108
+ <property name="autoDefault">
109
+ <bool>false</bool>
110
+ </property>
111
+ </widget>
112
+ </widget>
113
+ <tabstops>
114
+ <tabstop>addressInput</tabstop>
115
+ <tabstop>amountInput</tabstop>
116
+ <tabstop>passwordInput</tabstop>
117
+ <tabstop>submit_button</tabstop>
118
+ </tabstops>
119
+ <resources/>
120
+ <connections/>
121
+ </ui>
@@ -1,41 +1,93 @@
1
1
  module MastercoinWallet
2
2
  class MainWindow < Qt::Dialog
3
- slots 'new_simple_send()'
3
+ slots 'new_simple_send()', 'new_selling_offer()', 'new_purchase_offer()', 'create_order(QTreeWidgetItem *, int)', 'sync()', 'create_bitcoin_tx(QTreeWidgetItem *, int)'
4
+
5
+ def create_order(item, position)
6
+ address = item.text(0)
7
+ available = item.text(2)
8
+ fee = item.text(4)
9
+ new_purchase_offer({address: address, available: available, fee: fee})
10
+ end
11
+
12
+ def create_bitcoin_tx(item, position)
13
+ address = item.text(0)
14
+ bitcoin_amount = item.text(2)
15
+ if item.text(4) == "Waiting on Payment"
16
+ new_bitcoin_payment({address: address, bitcoin_amount: bitcoin_amount})
17
+ else
18
+ Qt::MessageBox.critical(self, tr("Invalid offer"),
19
+ tr("You can't pay for this offer, either because it's not accepted yet or because it's expired."))
20
+ end
21
+ end
4
22
 
5
23
  def initialize()
6
24
  super
7
- setWindowTitle(tr("Mastercoin wallet - v0.0.1"))
25
+
8
26
 
9
- @rows = []
27
+ @ui = Ui_MainWindow.new
28
+ @ui.setupUi(self)
10
29
 
11
- createBalanceOverview()
30
+ setWindowTitle(tr("Mastercoin wallet - v0.0.3"))
12
31
 
13
- @recentTransactions = Qt::TreeWidget.new
14
- @recentTransactions.setColumnCount(2)
15
- @recentTransactions.setHeaderLabels(["Address", "Amount", "Date"])
32
+ @rows = []
16
33
 
34
+ #createBalanceOverview()
35
+
36
+ @recentTransactions = findChild(Qt::TreeWidget, "overviewTree")
17
37
  @recentTransactions.setColumnWidth(0,300)
18
38
  @recentTransactions.setColumnWidth(1,50)
19
39
 
20
- overview = Qt::VBoxLayout.new
21
- @btc_balance_label = Qt::Label.new(tr("#{MastercoinWallet.config.btc_balance} BTC"))
22
- overview.addWidget(Qt::Label.new(tr("<h3>Mastercoin wallet</h3>")),0,0)
23
- overview.addWidget(Qt::Label.new(tr(MastercoinWallet.config.address)),1,0)
24
- overview.addWidget(@btc_balance_label,1,1)
40
+ @order_book = findChild(Qt::TreeWidget, "orderTree")
41
+ @order_book.setColumnWidth(0,280)
42
+ @order_book.setColumnWidth(1,70)
43
+ @order_book.setColumnWidth(2,80)
44
+ @order_book.setColumnWidth(4,70)
45
+
46
+ connect(@order_book, SIGNAL('itemDoubleClicked(QTreeWidgetItem *, int)'), self, SLOT('create_order(QTreeWidgetItem *,int)'))
47
+
48
+ @purchase_offers = findChild(Qt::TreeWidget, "purchaseTree")
49
+ @purchase_offers.setColumnWidth(0,280)
50
+ @purchase_offers.setColumnWidth(1,70)
51
+ @purchase_offers.setColumnWidth(2,80)
52
+ @purchase_offers.setColumnWidth(4,100)
53
+
54
+ connect(@purchase_offers, SIGNAL('itemDoubleClicked(QTreeWidgetItem *, int)'), self, SLOT('create_bitcoin_tx(QTreeWidgetItem *,int)'))
55
+
56
+ @balance_label = findChild(Qt::Label, "mscBalanceLabel")
57
+ @test_balance_label = findChild(Qt::Label, "tMscBalanceLabel")
58
+ @btc_balance_label = findChild(Qt::Label, "bitcoinLabel")
59
+ @address_label = findChild(Qt::Label, "mscAddressLabel")
60
+ @address_label.text = MastercoinWallet.config.address
25
61
 
26
- simple_send = Qt::PushButton.new
62
+ simple_send = findChild(Qt::PushButton, "simpleSendButton")
27
63
  simple_send.setText("New simple send")
28
64
  connect(simple_send, SIGNAL('clicked()'), self, SLOT('new_simple_send()'))
29
65
 
30
- self.layout = Qt::GridLayout.new do |m|
31
- m.addWidget(@gridGroupBox, 0, 0)
32
- m.addLayout(overview, 0, 1)
33
- m.addWidget(@recentTransactions, 1,0,1, 2)
34
- m.addWidget(simple_send, 2,1)
35
- end
66
+ selling_offer = findChild(Qt::PushButton, "sellingButton")
67
+ connect(selling_offer, SIGNAL('clicked()'), self, SLOT('new_selling_offer()'))
36
68
 
37
- MastercoinWallet.network.add_observer(self, :update)
38
- MastercoinWallet.network.sync!
69
+ purchase_offer = findChild(Qt::PushButton, "purchaseButton")
70
+ connect(purchase_offer, SIGNAL('clicked()'), self, SLOT('new_purchase_offer()'))
71
+
72
+ self.update
73
+ MastercoinWallet.selling_offers.add_observer(self, :update_order_book)
74
+ MastercoinWallet.wallet.add_observer(self, :update)
75
+ self.sync
76
+
77
+ # Sync every 30 seconds
78
+ @timer = Qt::Timer.new(self)
79
+ connect(@timer, SIGNAL('timeout()'), self, SLOT('sync()'))
80
+ @timer.start(30000)
81
+ end
82
+
83
+ def sync
84
+ MastercoinWallet.selling_offers.retrieve!
85
+ MastercoinWallet.wallet.sync!
86
+ end
87
+
88
+ def new_bitcoin_payment(options = {})
89
+ dialog = MastercoinWallet::BitcoinOfferWindow.new(nil, options)
90
+ dialog.exec
39
91
  end
40
92
 
41
93
  def new_simple_send
@@ -43,39 +95,113 @@ module MastercoinWallet
43
95
  dialog.exec
44
96
  end
45
97
 
98
+ def new_selling_offer
99
+ dialog = MastercoinWallet::SellingOfferWindow.new
100
+ dialog.exec
101
+ end
102
+
103
+ def new_purchase_offer(options = {})
104
+ dialog = MastercoinWallet::PurchaseOfferWindow.new(nil, options)
105
+ dialog.exec
106
+ end
107
+
46
108
  def update(status = true)
47
- puts "update"
48
109
  load_transactions
49
110
  update_balance
50
111
  end
51
112
 
113
+
114
+ def coin_name(currency_id)
115
+ if currency_id.to_s == "1"
116
+ "MSC"
117
+ else
118
+ "Test MSC"
119
+ end
120
+ end
121
+
122
+ def add_row(item, type)
123
+ row = Qt::TreeWidgetItem.new
124
+ row.setText(0, item["address"])
125
+ row.setText(1, item["amount"])
126
+ row.setText(2, type)
127
+ row.setText(3, coin_name(item["currency_id"]))
128
+ row.setText(4, item["tx_date"])
129
+ return row
130
+ end
131
+
132
+ def add_offer_row(item)
133
+ row = Qt::TreeWidgetItem.new
134
+ row.setText(0, item["address"])
135
+ row.setText(1, coin_name(item["currency_id"]))
136
+ row.setText(2, item["amount_available"])
137
+ row.setText(3, "#{item["price_per_coin"]} BTC")
138
+ row.setText(4, item["required_fee"])
139
+ row.setText(5, item["tx_date"])
140
+ return row
141
+ end
142
+
143
+ def add_purchase_row(item)
144
+ row = Qt::TreeWidgetItem.new
145
+ row.setText(0, item["selling_offer"]["address"])
146
+ row.setText(1, item["amount"])
147
+ row.setText(2, item["bitcoins_required"])
148
+ row.setText(3, coin_name(item["currency_id"]))
149
+ row.setText(4, item["status_text"])
150
+ row.setText(5, item["tx_date"])
151
+ return row
152
+ end
153
+
154
+ def update_order_book(orders)
155
+ orders.each do |order|
156
+ @rows << add_offer_row(order)
157
+ end
158
+ @order_book.clear()
159
+ @order_book.insertTopLevelItems(0, @rows)
160
+ end
161
+
52
162
  def load_transactions
163
+ if MastercoinWallet.config.has_key?(:pending_offers)
164
+ MastercoinWallet.config.pending_offers.each do |x|
165
+ @rows << add_purchase_row(x)
166
+ end
167
+ @purchase_offers.clear()
168
+ @purchase_offers.insertTopLevelItems(0, @rows)
169
+ end
170
+
53
171
  if MastercoinWallet.config.has_key?(:received_transactions)
54
172
  MastercoinWallet.config.received_transactions.each do |x|
55
- row = Qt::TreeWidgetItem.new
56
- row.setText(0, x["address"])
57
- row.setText(1, x["amount"])
58
- row.setText(2, x["tx_date"])
59
- @rows << row
173
+ @rows << add_row(x, "Receiving")
174
+ end
175
+ end
176
+
177
+ if MastercoinWallet.config.has_key?(:exodus_transactions)
178
+ MastercoinWallet.config.exodus_transactions.each do |x|
179
+ @rows << add_row(x, "Exodus")
60
180
  end
61
181
  end
62
182
 
63
183
  if MastercoinWallet.config.has_key?(:sent_transactions)
64
184
  MastercoinWallet.config.sent_transactions.each do |x|
65
- row = Qt::TreeWidgetItem.new
66
- row.setText(0, x["receiving_address"])
67
- row.setText(1, x["amount"])
68
- row.setText(2, x["tx_date"])
69
- @rows << row
185
+ @rows << add_row(x, "Sent")
70
186
  end
71
187
  end
72
-
188
+ if MastercoinWallet.config.has_key?(:bought)
189
+ MastercoinWallet.config.sent_transactions.each do |x|
190
+ @rows << add_row(x, "Bought")
191
+ end
192
+ end
193
+ if MastercoinWallet.config.has_key?(:sold)
194
+ MastercoinWallet.config.sent_transactions.each do |x|
195
+ @rows << add_row(x, "Sold")
196
+ end
197
+ end
198
+ @recentTransactions.clear()
73
199
  @recentTransactions.insertTopLevelItems(0, @rows)
74
200
  end
75
201
 
76
202
  def update_balance
77
203
  @balance_label.setText("#{MastercoinWallet.config.balance} MSC")
78
- @test_balance_label.setText("Test #{MastercoinWallet.config.test_balance} MSC")
204
+ @test_balance_label.setText("#{MastercoinWallet.config.test_balance} Test MSC")
79
205
  @btc_balance_label.setText(tr("#{MastercoinWallet.config.btc_balance} BTC"))
80
206
  end
81
207
 
@@ -0,0 +1,356 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ui version="4.0">
3
+ <class>MainWindow</class>
4
+ <widget class="QDialog" name="MainWindow">
5
+ <property name="geometry">
6
+ <rect>
7
+ <x>0</x>
8
+ <y>0</y>
9
+ <width>746</width>
10
+ <height>469</height>
11
+ </rect>
12
+ </property>
13
+ <property name="sizePolicy">
14
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
15
+ <horstretch>0</horstretch>
16
+ <verstretch>0</verstretch>
17
+ </sizepolicy>
18
+ </property>
19
+ <property name="windowTitle">
20
+ <string>New Purchase Offer</string>
21
+ </property>
22
+ <widget class="QTabWidget" name="mainTab">
23
+ <property name="geometry">
24
+ <rect>
25
+ <x>10</x>
26
+ <y>10</y>
27
+ <width>731</width>
28
+ <height>451</height>
29
+ </rect>
30
+ </property>
31
+ <property name="sizePolicy">
32
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
33
+ <horstretch>0</horstretch>
34
+ <verstretch>0</verstretch>
35
+ </sizepolicy>
36
+ </property>
37
+ <property name="currentIndex">
38
+ <number>0</number>
39
+ </property>
40
+ <widget class="QWidget" name="tab">
41
+ <attribute name="title">
42
+ <string>Dashboard</string>
43
+ </attribute>
44
+ <widget class="QGroupBox" name="balanceGroup">
45
+ <property name="geometry">
46
+ <rect>
47
+ <x>10</x>
48
+ <y>0</y>
49
+ <width>201</width>
50
+ <height>111</height>
51
+ </rect>
52
+ </property>
53
+ <property name="title">
54
+ <string>Balances</string>
55
+ </property>
56
+ <widget class="QLabel" name="mscBalanceLabel">
57
+ <property name="geometry">
58
+ <rect>
59
+ <x>10</x>
60
+ <y>30</y>
61
+ <width>181</width>
62
+ <height>19</height>
63
+ </rect>
64
+ </property>
65
+ <property name="text">
66
+ <string>Updating MSC balance</string>
67
+ </property>
68
+ </widget>
69
+ <widget class="QLabel" name="tMscBalanceLabel">
70
+ <property name="geometry">
71
+ <rect>
72
+ <x>10</x>
73
+ <y>50</y>
74
+ <width>171</width>
75
+ <height>20</height>
76
+ </rect>
77
+ </property>
78
+ <property name="text">
79
+ <string>Updating test MSC balance</string>
80
+ </property>
81
+ </widget>
82
+ <widget class="QLabel" name="bitcoinLabel">
83
+ <property name="geometry">
84
+ <rect>
85
+ <x>10</x>
86
+ <y>70</y>
87
+ <width>171</width>
88
+ <height>19</height>
89
+ </rect>
90
+ </property>
91
+ <property name="text">
92
+ <string>Updating Bitcoin balance</string>
93
+ </property>
94
+ </widget>
95
+ </widget>
96
+ <widget class="QLabel" name="mscAddressLabel">
97
+ <property name="geometry">
98
+ <rect>
99
+ <x>220</x>
100
+ <y>40</y>
101
+ <width>471</width>
102
+ <height>51</height>
103
+ </rect>
104
+ </property>
105
+ <property name="font">
106
+ <font>
107
+ <family>Verdana</family>
108
+ <pointsize>24</pointsize>
109
+ </font>
110
+ </property>
111
+ <property name="text">
112
+ <string>MSC Address</string>
113
+ </property>
114
+ </widget>
115
+ <widget class="QTreeWidget" name="overviewTree">
116
+ <property name="geometry">
117
+ <rect>
118
+ <x>10</x>
119
+ <y>120</y>
120
+ <width>711</width>
121
+ <height>251</height>
122
+ </rect>
123
+ </property>
124
+ <property name="sortingEnabled">
125
+ <bool>true</bool>
126
+ </property>
127
+ <property name="columnCount">
128
+ <number>5</number>
129
+ </property>
130
+ <column>
131
+ <property name="text">
132
+ <string>Address</string>
133
+ </property>
134
+ </column>
135
+ <column>
136
+ <property name="text">
137
+ <string>Amount</string>
138
+ </property>
139
+ </column>
140
+ <column>
141
+ <property name="text">
142
+ <string>Type</string>
143
+ </property>
144
+ </column>
145
+ <column>
146
+ <property name="text">
147
+ <string>Currency</string>
148
+ </property>
149
+ </column>
150
+ <column>
151
+ <property name="text">
152
+ <string>Date</string>
153
+ </property>
154
+ </column>
155
+ </widget>
156
+ <widget class="QPushButton" name="simpleSendButton">
157
+ <property name="geometry">
158
+ <rect>
159
+ <x>580</x>
160
+ <y>380</y>
161
+ <width>141</width>
162
+ <height>32</height>
163
+ </rect>
164
+ </property>
165
+ <property name="text">
166
+ <string>new Simple Send</string>
167
+ </property>
168
+ </widget>
169
+ <widget class="QLabel" name="label_3">
170
+ <property name="geometry">
171
+ <rect>
172
+ <x>220</x>
173
+ <y>20</y>
174
+ <width>231</width>
175
+ <height>19</height>
176
+ </rect>
177
+ </property>
178
+ <property name="text">
179
+ <string>Mastercoin wallet for</string>
180
+ </property>
181
+ </widget>
182
+ </widget>
183
+ <widget class="QWidget" name="tab_2">
184
+ <attribute name="title">
185
+ <string>Distributed exchange</string>
186
+ </attribute>
187
+ <widget class="QTreeWidget" name="orderTree">
188
+ <property name="geometry">
189
+ <rect>
190
+ <x>10</x>
191
+ <y>30</y>
192
+ <width>701</width>
193
+ <height>131</height>
194
+ </rect>
195
+ </property>
196
+ <property name="toolTip">
197
+ <string>Double click to create a purchase offer from this Selling Offer</string>
198
+ </property>
199
+ <column>
200
+ <property name="text">
201
+ <string>Seller</string>
202
+ </property>
203
+ </column>
204
+ <column>
205
+ <property name="text">
206
+ <string>Currency</string>
207
+ </property>
208
+ </column>
209
+ <column>
210
+ <property name="text">
211
+ <string>Units available</string>
212
+ </property>
213
+ </column>
214
+ <column>
215
+ <property name="text">
216
+ <string>Price per coin</string>
217
+ </property>
218
+ </column>
219
+ <column>
220
+ <property name="text">
221
+ <string>Required fee</string>
222
+ </property>
223
+ </column>
224
+ <column>
225
+ <property name="text">
226
+ <string>Date</string>
227
+ </property>
228
+ </column>
229
+ </widget>
230
+ <widget class="QLabel" name="label">
231
+ <property name="geometry">
232
+ <rect>
233
+ <x>10</x>
234
+ <y>-2</y>
235
+ <width>151</width>
236
+ <height>31</height>
237
+ </rect>
238
+ </property>
239
+ <property name="text">
240
+ <string>&lt;h2&gt;Order book&lt;/h2&gt;</string>
241
+ </property>
242
+ </widget>
243
+ <widget class="QPushButton" name="sellingButton">
244
+ <property name="geometry">
245
+ <rect>
246
+ <x>580</x>
247
+ <y>160</y>
248
+ <width>131</width>
249
+ <height>32</height>
250
+ </rect>
251
+ </property>
252
+ <property name="text">
253
+ <string>New Selling Offer</string>
254
+ </property>
255
+ </widget>
256
+ <widget class="QTreeWidget" name="purchaseTree">
257
+ <property name="geometry">
258
+ <rect>
259
+ <x>10</x>
260
+ <y>250</y>
261
+ <width>701</width>
262
+ <height>131</height>
263
+ </rect>
264
+ </property>
265
+ <column>
266
+ <property name="text">
267
+ <string>Offer address</string>
268
+ </property>
269
+ </column>
270
+ <column>
271
+ <property name="text">
272
+ <string>Amount</string>
273
+ </property>
274
+ </column>
275
+ <column>
276
+ <property name="text">
277
+ <string>Bitcoin amount</string>
278
+ </property>
279
+ </column>
280
+ <column>
281
+ <property name="text">
282
+ <string>Currency</string>
283
+ </property>
284
+ </column>
285
+ <column>
286
+ <property name="text">
287
+ <string>Offer status</string>
288
+ </property>
289
+ </column>
290
+ <column>
291
+ <property name="text">
292
+ <string>Date</string>
293
+ </property>
294
+ </column>
295
+ </widget>
296
+ <widget class="QLabel" name="label_2">
297
+ <property name="geometry">
298
+ <rect>
299
+ <x>10</x>
300
+ <y>210</y>
301
+ <width>191</width>
302
+ <height>31</height>
303
+ </rect>
304
+ </property>
305
+ <property name="text">
306
+ <string>&lt;h2&gt;My purchase offers&lt;/h2&gt;</string>
307
+ </property>
308
+ </widget>
309
+ <widget class="QPushButton" name="purchaseButton">
310
+ <property name="geometry">
311
+ <rect>
312
+ <x>560</x>
313
+ <y>380</y>
314
+ <width>151</width>
315
+ <height>32</height>
316
+ </rect>
317
+ </property>
318
+ <property name="text">
319
+ <string>New Purchase Offer</string>
320
+ </property>
321
+ </widget>
322
+ <widget class="QLabel" name="label_4">
323
+ <property name="geometry">
324
+ <rect>
325
+ <x>10</x>
326
+ <y>160</y>
327
+ <width>521</width>
328
+ <height>21</height>
329
+ </rect>
330
+ </property>
331
+ <property name="text">
332
+ <string>Hint: You can double click to create a Purchase Offer for an item in the order book</string>
333
+ </property>
334
+ </widget>
335
+ <widget class="QLabel" name="label_5">
336
+ <property name="geometry">
337
+ <rect>
338
+ <x>10</x>
339
+ <y>380</y>
340
+ <width>521</width>
341
+ <height>41</height>
342
+ </rect>
343
+ </property>
344
+ <property name="text">
345
+ <string>Hint: You can double click to send the required Bitcoins for an accepted Purchase offer that's waiting on payment</string>
346
+ </property>
347
+ <property name="wordWrap">
348
+ <bool>true</bool>
349
+ </property>
350
+ </widget>
351
+ </widget>
352
+ </widget>
353
+ </widget>
354
+ <resources/>
355
+ <connections/>
356
+ </ui>