Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F10907596
sendcoinsentry.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
sendcoinsentry.cpp
View Options
// Copyright (c) 2011-2013 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include
"sendcoinsentry.h"
#include
"ui_sendcoinsentry.h"
#include
"addressbookpage.h"
#include
"addresstablemodel.h"
#include
"guiutil.h"
#include
"optionsmodel.h"
#include
"walletmodel.h"
#include
<QApplication>
#include
<QClipboard>
SendCoinsEntry
::
SendCoinsEntry
(
QWidget
*
parent
)
:
QStackedWidget
(
parent
),
ui
(
new
Ui
::
SendCoinsEntry
),
model
(
0
)
{
ui
->
setupUi
(
this
);
setCurrentWidget
(
ui
->
SendCoins
);
#ifdef Q_OS_MAC
ui
->
payToLayout
->
setSpacing
(
4
);
#endif
#if QT_VERSION >= 0x040700
ui
->
addAsLabel
->
setPlaceholderText
(
tr
(
"Enter a label for this address to add it to your address book"
));
ui
->
payTo
->
setPlaceholderText
(
tr
(
"Enter a Bitcoin address (e.g. 1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L)"
));
#endif
setFocusProxy
(
ui
->
payTo
);
// normal bitcoin address field
GUIUtil
::
setupAddressWidget
(
ui
->
payTo
,
this
);
// just a label for displaying bitcoin address(es)
ui
->
payTo_is
->
setFont
(
GUIUtil
::
bitcoinAddressFont
());
}
SendCoinsEntry
::~
SendCoinsEntry
()
{
delete
ui
;
}
void
SendCoinsEntry
::
on_pasteButton_clicked
()
{
// Paste text from clipboard into recipient field
ui
->
payTo
->
setText
(
QApplication
::
clipboard
()
->
text
());
}
void
SendCoinsEntry
::
on_addressBookButton_clicked
()
{
if
(
!
model
)
return
;
AddressBookPage
dlg
(
AddressBookPage
::
ForSelection
,
AddressBookPage
::
SendingTab
,
this
);
dlg
.
setModel
(
model
->
getAddressTableModel
());
if
(
dlg
.
exec
())
{
ui
->
payTo
->
setText
(
dlg
.
getReturnValue
());
ui
->
payAmount
->
setFocus
();
}
}
void
SendCoinsEntry
::
on_payTo_textChanged
(
const
QString
&
address
)
{
updateLabel
(
address
);
}
void
SendCoinsEntry
::
setModel
(
WalletModel
*
model
)
{
this
->
model
=
model
;
if
(
model
&&
model
->
getOptionsModel
())
connect
(
model
->
getOptionsModel
(),
SIGNAL
(
displayUnitChanged
(
int
)),
this
,
SLOT
(
updateDisplayUnit
()));
connect
(
ui
->
payAmount
,
SIGNAL
(
textChanged
()),
this
,
SIGNAL
(
payAmountChanged
()));
connect
(
ui
->
deleteButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
deleteClicked
()));
connect
(
ui
->
deleteButton_is
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
deleteClicked
()));
connect
(
ui
->
deleteButton_s
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
deleteClicked
()));
clear
();
}
void
SendCoinsEntry
::
clear
()
{
// clear UI elements for normal payment
ui
->
payTo
->
clear
();
ui
->
addAsLabel
->
clear
();
ui
->
payAmount
->
clear
();
// clear UI elements for insecure payment request
ui
->
payTo_is
->
clear
();
ui
->
memoTextLabel_is
->
clear
();
ui
->
payAmount_is
->
clear
();
// clear UI elements for secure payment request
ui
->
payTo_s
->
clear
();
ui
->
memoTextLabel_s
->
clear
();
ui
->
payAmount_s
->
clear
();
// update the display unit, to not use the default ("BTC")
updateDisplayUnit
();
}
void
SendCoinsEntry
::
deleteClicked
()
{
emit
removeEntry
(
this
);
}
bool
SendCoinsEntry
::
validate
()
{
if
(
!
model
)
return
false
;
// Check input validity
bool
retval
=
true
;
// Skip checks for payment request
if
(
recipient
.
paymentRequest
.
IsInitialized
())
return
retval
;
if
(
!
ui
->
payTo
->
hasAcceptableInput
()
||
!
model
->
validateAddress
(
ui
->
payTo
->
text
()))
{
ui
->
payTo
->
setValid
(
false
);
retval
=
false
;
}
if
(
!
ui
->
payAmount
->
validate
())
{
retval
=
false
;
}
// Reject dust outputs:
if
(
retval
&&
GUIUtil
::
isDust
(
ui
->
payTo
->
text
(),
ui
->
payAmount
->
value
()))
{
ui
->
payAmount
->
setValid
(
false
);
retval
=
false
;
}
return
retval
;
}
SendCoinsRecipient
SendCoinsEntry
::
getValue
()
{
// Payment request
if
(
recipient
.
paymentRequest
.
IsInitialized
())
return
recipient
;
// Normal payment
recipient
.
address
=
ui
->
payTo
->
text
();
recipient
.
label
=
ui
->
addAsLabel
->
text
();
recipient
.
amount
=
ui
->
payAmount
->
value
();
return
recipient
;
}
QWidget
*
SendCoinsEntry
::
setupTabChain
(
QWidget
*
prev
)
{
QWidget
::
setTabOrder
(
prev
,
ui
->
payTo
);
QWidget
::
setTabOrder
(
ui
->
payTo
,
ui
->
addressBookButton
);
QWidget
::
setTabOrder
(
ui
->
addressBookButton
,
ui
->
pasteButton
);
QWidget
::
setTabOrder
(
ui
->
pasteButton
,
ui
->
deleteButton
);
QWidget
::
setTabOrder
(
ui
->
deleteButton
,
ui
->
addAsLabel
);
return
ui
->
payAmount
->
setupTabChain
(
ui
->
addAsLabel
);
}
void
SendCoinsEntry
::
setValue
(
const
SendCoinsRecipient
&
value
)
{
recipient
=
value
;
if
(
recipient
.
paymentRequest
.
IsInitialized
())
// payment request
{
if
(
recipient
.
authenticatedMerchant
.
isEmpty
())
// insecure
{
ui
->
payTo_is
->
setText
(
recipient
.
address
);
ui
->
memoTextLabel_is
->
setText
(
recipient
.
message
);
ui
->
payAmount_is
->
setValue
(
recipient
.
amount
);
ui
->
payAmount_is
->
setReadOnly
(
true
);
setCurrentWidget
(
ui
->
SendCoins_InsecurePaymentRequest
);
}
else
// secure
{
ui
->
payTo_s
->
setText
(
recipient
.
authenticatedMerchant
);
ui
->
memoTextLabel_s
->
setText
(
recipient
.
message
);
ui
->
payAmount_s
->
setValue
(
recipient
.
amount
);
ui
->
payAmount_s
->
setReadOnly
(
true
);
setCurrentWidget
(
ui
->
SendCoins_SecurePaymentRequest
);
}
}
else
// normal payment
{
ui
->
payTo
->
setText
(
recipient
.
address
);
ui
->
addAsLabel
->
setText
(
recipient
.
label
);
ui
->
payAmount
->
setValue
(
recipient
.
amount
);
}
}
void
SendCoinsEntry
::
setAddress
(
const
QString
&
address
)
{
ui
->
payTo
->
setText
(
address
);
ui
->
payAmount
->
setFocus
();
}
bool
SendCoinsEntry
::
isClear
()
{
return
ui
->
payTo
->
text
().
isEmpty
()
&&
ui
->
payTo_is
->
text
().
isEmpty
()
&&
ui
->
payTo_s
->
text
().
isEmpty
();
}
void
SendCoinsEntry
::
setFocus
()
{
ui
->
payTo
->
setFocus
();
}
void
SendCoinsEntry
::
updateDisplayUnit
()
{
if
(
model
&&
model
->
getOptionsModel
())
{
// Update payAmount with the current unit
ui
->
payAmount
->
setDisplayUnit
(
model
->
getOptionsModel
()
->
getDisplayUnit
());
ui
->
payAmount_is
->
setDisplayUnit
(
model
->
getOptionsModel
()
->
getDisplayUnit
());
ui
->
payAmount_s
->
setDisplayUnit
(
model
->
getOptionsModel
()
->
getDisplayUnit
());
}
}
bool
SendCoinsEntry
::
updateLabel
(
const
QString
&
address
)
{
if
(
!
model
)
return
false
;
// Fill in label from address book, if address has an associated label
QString
associatedLabel
=
model
->
getAddressTableModel
()
->
labelForAddress
(
address
);
if
(
!
associatedLabel
.
isEmpty
())
{
ui
->
addAsLabel
->
setText
(
associatedLabel
);
return
true
;
}
return
false
;
}
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Mon, Nov 25, 08:05 (1 d, 19 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4535726
Default Alt Text
sendcoinsentry.cpp (6 KB)
Attached To
rSTAGING Bitcoin ABC staging
Event Timeline
Log In to Comment