mastercoin-wallet 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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>