do\r
{\r
pindexTmp = pindexBest;\r
- Sleep(10000);\r
+ for (int i = 0; i < 10; i++)\r
+ {\r
+ Sleep(1000);\r
+ if (fShutdown)\r
+ return;\r
+ }\r
}\r
while (pindexTmp != pindexBest);\r
}\r
if (keyRet.IsNull())\r
keyRet.MakeNewKey();\r
\r
- // Fill a vout to ourself\r
- CScript scriptPubKey;\r
- scriptPubKey << keyRet.GetPubKey() << OP_CHECKSIG;\r
- wtxNew.vout.push_back(CTxOut(nValueIn - nTotalValue, scriptPubKey));\r
+ // Fill a vout to ourself, using same address type as the payment\r
+ CScript scriptChange;\r
+ if (scriptPubKey.GetBitcoinAddressHash160() != 0)\r
+ scriptChange.SetBitcoinAddress(keyRet.GetPubKey());\r
+ else\r
+ scriptChange << keyRet.GetPubKey() << OP_CHECKSIG;\r
+ wtxNew.vout.push_back(CTxOut(nValueIn - nTotalValue, scriptChange));\r
}\r
\r
// Fill a vout to the payee\r
}\r
\r
// Call after CreateTransaction unless you want to abort\r
-bool CommitTransactionSpent(const CWalletTx& wtxNew, const CKey& key)\r
+bool CommitTransaction(CWalletTx& wtxNew, const CKey& key)\r
{\r
CRITICAL_BLOCK(cs_main)\r
- CRITICAL_BLOCK(cs_mapWallet)\r
{\r
- //// old: eventually should make this transactional, never want to add a\r
- //// transaction without marking spent transactions, although the risk of\r
- //// interruption during this step is remote.\r
- //// update: This matters even less now that fSpent can get corrected\r
- //// when transactions are seen in VerifySignature. The remote chance of\r
- //// unmarked fSpent will be handled by that. Don't need to make this\r
- //// transactional. Pls delete this comment block later.\r
-\r
- // This is only to keep the database open to defeat the auto-flush for the\r
- // duration of this scope. This is the only place where this optimization\r
- // maybe makes sense; please don't do it anywhere else.\r
- CWalletDB walletdb("r");\r
-\r
- // Add the change's private key to wallet\r
- if (!key.IsNull() && !AddKey(key))\r
- throw runtime_error("CommitTransactionSpent() : AddKey failed\n");\r
-\r
- // Add tx to wallet, because if it has change it's also ours,\r
- // otherwise just for transaction history.\r
- AddToWallet(wtxNew);\r
+ printf("CommitTransaction:\n%s", wtxNew.ToString().c_str());\r
+ CRITICAL_BLOCK(cs_mapWallet)\r
+ {\r
+ // This is only to keep the database open to defeat the auto-flush for the\r
+ // duration of this scope. This is the only place where this optimization\r
+ // maybe makes sense; please don't do it anywhere else.\r
+ CWalletDB walletdb("r");\r
+\r
+ // Add the change's private key to wallet\r
+ if (!key.IsNull() && !AddKey(key))\r
+ throw runtime_error("CommitTransaction() : AddKey failed\n");\r
+\r
+ // Add tx to wallet, because if it has change it's also ours,\r
+ // otherwise just for transaction history.\r
+ AddToWallet(wtxNew);\r
+\r
+ // Mark old coins as spent\r
+ set<CWalletTx*> setCoins;\r
+ foreach(const CTxIn& txin, wtxNew.vin)\r
+ setCoins.insert(&mapWallet[txin.prevout.hash]);\r
+ foreach(CWalletTx* pcoin, setCoins)\r
+ {\r
+ pcoin->fSpent = true;\r
+ pcoin->WriteToDisk();\r
+ vWalletUpdated.push_back(pcoin->GetHash());\r
+ }\r
+ }\r
+\r
+ // Track how many getdata requests our transaction gets\r
+ CRITICAL_BLOCK(cs_mapRequestCount)\r
+ mapRequestCount[wtxNew.GetHash()] = 0;\r
\r
- // Mark old coins as spent\r
- set<CWalletTx*> setCoins;\r
- foreach(const CTxIn& txin, wtxNew.vin)\r
- setCoins.insert(&mapWallet[txin.prevout.hash]);\r
- foreach(CWalletTx* pcoin, setCoins)\r
+ // Broadcast\r
+ if (!wtxNew.AcceptTransaction())\r
{\r
- pcoin->fSpent = true;\r
- pcoin->WriteToDisk();\r
- vWalletUpdated.push_back(pcoin->GetHash());\r
+ // This must not fail. The transaction has already been signed and recorded.\r
+ printf("CommitTransaction() : Error: Transaction not valid");\r
+ return false;\r
}\r
+ wtxNew.RelayWalletTransaction();\r
}\r
MainFrameRepaint();\r
return true;\r
\r
\r
\r
-string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew)\r
+string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee)\r
{\r
CRITICAL_BLOCK(cs_main)\r
{\r
printf("SendMoney() : %s", strError.c_str());\r
return strError;\r
}\r
- if (!CommitTransactionSpent(wtxNew, key))\r
- {\r
- printf("SendMoney() : Error finalizing transaction");\r
- return _("Error finalizing transaction");\r
- }\r
-\r
- // Track how many getdata requests our transaction gets\r
- CRITICAL_BLOCK(cs_mapRequestCount)\r
- mapRequestCount[wtxNew.GetHash()] = 0;\r
\r
- printf("SendMoney: %s\n", wtxNew.GetHash().ToString().substr(0,6).c_str());\r
+ if (fAskFee && !ThreadSafeAskFee(nFeeRequired, _("Sending..."), NULL))\r
+ return "ABORTED";\r
\r
- // Broadcast\r
- if (!wtxNew.AcceptTransaction())\r
- {\r
- // This must not fail. The transaction has already been signed and recorded.\r
- printf("SendMoney() : Error: Transaction not valid");\r
+ if (!CommitTransaction(wtxNew, key))\r
return _("Error: The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here.");\r
- }\r
- wtxNew.RelayWalletTransaction();\r
}\r
MainFrameRepaint();\r
return "";\r
\r
\r
\r
-string SendMoneyToBitcoinAddress(string strAddress, int64 nValue, CWalletTx& wtxNew)\r
+string SendMoneyToBitcoinAddress(string strAddress, int64 nValue, CWalletTx& wtxNew, bool fAskFee)\r
{\r
// Check amount\r
if (nValue <= 0)\r
if (!scriptPubKey.SetBitcoinAddress(strAddress))\r
return _("Invalid bitcoin address");\r
\r
- return SendMoney(scriptPubKey, nValue, wtxNew);\r
+ return SendMoney(scriptPubKey, nValue, wtxNew, fAskFee);\r
}\r
bool SendMessages(CNode* pto);\r
int64 GetBalance();\r
bool CreateTransaction(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, CKey& keyRet, int64& nFeeRequiredRet);\r
-bool CommitTransactionSpent(const CWalletTx& wtxNew, const CKey& key);\r
-string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew);\r
-string SendMoneyToBitcoinAddress(string strAddress, int64 nValue, CWalletTx& wtxNew);\r
+bool CommitTransaction(CWalletTx& wtxNew, const CKey& key);\r
+bool BroadcastTransaction(CWalletTx& wtxNew);\r
+string SendMoney(CScript scriptPubKey, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false);\r
+string SendMoneyToBitcoinAddress(string strAddress, int64 nValue, CWalletTx& wtxNew, bool fAskFee=false);\r
void GenerateBitcoins(bool fGenerate);\r
void ThreadBitcoinMiner(void* parg);\r
void BitcoinMiner();\r
*this << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG;\r
}\r
\r
+ void SetBitcoinAddress(const vector<unsigned char>& vchPubKey)\r
+ {\r
+ SetBitcoinAddress(Hash160(vchPubKey));\r
+ }\r
+\r
bool SetBitcoinAddress(const string& strAddress)\r
{\r
this->clear();\r
class CDataStream;\r
class CAutoFile;\r
\r
-static const int VERSION = 203;\r
+static const int VERSION = 204;\r
static const char* pszSubVer = ".0";\r
\r
\r
// Util\r
//\r
\r
+void ExitTimeout(void* parg)\r
+{\r
+#ifdef __WXMSW__\r
+ Sleep(5000);\r
+ ExitProcess(0);\r
+#endif\r
+}\r
+\r
+void Shutdown(void* parg)\r
+{\r
+ static CCriticalSection cs_Shutdown;\r
+ static bool fTaken;\r
+ bool fFirstThread;\r
+ CRITICAL_BLOCK(cs_Shutdown)\r
+ {\r
+ fFirstThread = !fTaken;\r
+ fTaken = true;\r
+ }\r
+ static bool fExit;\r
+ if (fFirstThread)\r
+ {\r
+ fShutdown = true;\r
+ nTransactionsUpdated++;\r
+ DBFlush(false);\r
+ StopNode();\r
+ DBFlush(true);\r
+ CreateThread(ExitTimeout, NULL);\r
+ Sleep(50);\r
+ printf("Bitcoin exiting\n\n");\r
+ fExit = true;\r
+ exit(0);\r
+ }\r
+ else\r
+ {\r
+ while (!fExit)\r
+ Sleep(500);\r
+ Sleep(100);\r
+ ExitThread(0);\r
+ }\r
+}\r
+\r
void HandleCtrlA(wxKeyEvent& event)\r
{\r
// Ctrl-a select all\r
+ event.Skip();\r
wxTextCtrl* textCtrl = (wxTextCtrl*)event.GetEventObject();\r
if (event.GetModifiers() == wxMOD_CONTROL && event.GetKeyCode() == 'A')\r
textCtrl->SetSelection(-1, -1);\r
- event.Skip();\r
}\r
\r
bool Is24HourTime()\r
#endif\r
}\r
\r
+bool ThreadSafeAskFee(int64 nFeeRequired, const string& strCaption, wxWindow* parent)\r
+{\r
+ if (nFeeRequired == 0 || fDaemon)\r
+ return true;\r
+ string strMessage = strprintf(\r
+ _("This transaction is over the size limit. You can still send it for a fee of %s, "\r
+ "which goes to the nodes that process your transaction and helps to support the network. "\r
+ "Do you want to pay the fee?"),\r
+ FormatMoney(nFeeRequired).c_str());\r
+ return (ThreadSafeMessageBox(strMessage, strCaption, wxYES_NO, parent) == wxYES);\r
+}\r
+\r
+void SetDefaultReceivingAddress(const string& strAddress)\r
+{\r
+ // Update main window address and database\r
+ if (pframeMain == NULL)\r
+ return;\r
+ if (strAddress != pframeMain->m_textCtrlAddress->GetValue())\r
+ {\r
+ uint160 hash160;\r
+ if (!AddressToHash160(strAddress, hash160))\r
+ return;\r
+ if (!mapPubKeys.count(hash160))\r
+ return;\r
+ CWalletDB().WriteDefaultKey(mapPubKeys[hash160]);\r
+ pframeMain->m_textCtrlAddress->SetValue(strAddress);\r
+ }\r
+}\r
+\r
\r
\r
\r
fontTmp.SetFamily(wxFONTFAMILY_TELETYPE);\r
m_staticTextBalance->SetFont(fontTmp);\r
m_staticTextBalance->SetSize(140, 17);\r
- // & underlines don't work on the toolbar buttons on gtk\r
- m_toolBar->ClearTools();\r
- m_toolBar->AddTool(wxID_BUTTONSEND, _("Send Coins"), wxBitmap(send20_xpm), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString);\r
- m_toolBar->AddTool(wxID_BUTTONRECEIVE, _("Address Book"), wxBitmap(addressbook20_xpm), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString);\r
- m_toolBar->Realize();\r
// resize to fit ubuntu's huge default font\r
dResize = 1.20;\r
SetSize((dResize + 0.02) * GetSize().GetWidth(), 1.09 * GetSize().GetHeight());\r
ptaskbaricon = NULL;\r
}\r
\r
-void ExitTimeout(void* parg)\r
-{\r
-#ifdef __WXMSW__\r
- Sleep(5000);\r
- ExitProcess(0);\r
-#endif\r
-}\r
-\r
-void Shutdown(void* parg)\r
-{\r
- static CCriticalSection cs_Shutdown;\r
- static bool fTaken;\r
- bool fFirstThread;\r
- CRITICAL_BLOCK(cs_Shutdown)\r
- {\r
- fFirstThread = !fTaken;\r
- fTaken = true;\r
- }\r
- static bool fExit;\r
- if (fFirstThread)\r
- {\r
- fShutdown = true;\r
- nTransactionsUpdated++;\r
- DBFlush(false);\r
- StopNode();\r
- DBFlush(true);\r
- CreateThread(ExitTimeout, NULL);\r
- Sleep(50);\r
- printf("Bitcoin exiting\n\n");\r
- fExit = true;\r
- exit(0);\r
- }\r
- else\r
- {\r
- while (!fExit)\r
- Sleep(500);\r
- Sleep(100);\r
- ExitThread(0);\r
- }\r
-}\r
-\r
void CMainFrame::OnClose(wxCloseEvent& event)\r
{\r
if (fMinimizeOnClose && event.CanVeto() && !IsIconized())\r
\r
void CMainFrame::OnIconize(wxIconizeEvent& event)\r
{\r
+ event.Skip();\r
// Hide the task bar button when minimized.\r
// Event is sent when the frame is minimized or restored.\r
// wxWidgets 2.8.9 doesn't have IsIconized() so there's no way\r
if (!event.Iconized())\r
fClosedToTray = false;\r
#ifndef __WXMSW__\r
- // Tray is not reliable on Linux gnome\r
+ // Tray is not reliable on ubuntu 9.10 gnome\r
fClosedToTray = false;\r
#endif\r
if (fMinimizeToTray && event.Iconized())\r
\r
void CMainFrame::OnMouseEvents(wxMouseEvent& event)\r
{\r
+ event.Skip();\r
RandAddSeed();\r
RAND_add(&event.m_x, sizeof(event.m_x), 0.25);\r
RAND_add(&event.m_y, sizeof(event.m_y), 0.25);\r
\r
void CMainFrame::OnListColBeginDrag(wxListEvent& event)\r
{\r
- // Hidden columns not resizeable\r
- if (event.GetColumn() <= 1 && !fDebug)\r
+ // Hidden columns not resizeable\r
+ if (event.GetColumn() <= 1 && !fDebug)\r
event.Veto();\r
+ else\r
+ event.Skip();\r
}\r
\r
int CMainFrame::GetSortIndex(const string& strSort)\r
\r
if (wtx.IsCoinBase())\r
{\r
- // Coinbase\r
+ // Generated\r
strDescription = _("Generated");\r
if (nCredit == 0)\r
{\r
}\r
else if (!mapValue["from"].empty() || !mapValue["message"].empty())\r
{\r
- // Online transaction\r
+ // Received by IP connection\r
if (!mapValue["from"].empty())\r
strDescription += _("From: ") + mapValue["from"];\r
if (!mapValue["message"].empty())\r
}\r
else\r
{\r
- // Offline transaction\r
+ // Received by Bitcoin Address\r
foreach(const CTxOut& txout, wtx.vout)\r
{\r
if (txout.IsMine())\r
{\r
CRITICAL_BLOCK(cs_mapAddressBook)\r
{\r
+ //strDescription += _("Received payment to ");\r
+ //strDescription += _("Received with address ");\r
+ strDescription += _("From: unknown, Received with: ");\r
string strAddress = PubKeyToAddress(vchPubKey);\r
- if (mapAddressBook.count(strAddress))\r
+ map<string, string>::iterator mi = mapAddressBook.find(strAddress);\r
+ if (mi != mapAddressBook.end() && !(*mi).second.empty())\r
{\r
- //strDescription += _("Received payment to ");\r
- //strDescription += _("Received with address ");\r
- strDescription += _("From: unknown, To: ");\r
- strDescription += strAddress;\r
- /// The labeling feature is just too confusing, so I hid it\r
- /// by putting it at the end where it runs off the screen.\r
- /// It can still be seen by widening the column, or in the\r
- /// details dialog.\r
- if (!mapAddressBook[strAddress].empty())\r
- strDescription += " (" + mapAddressBook[strAddress] + ")";\r
+ string strLabel = (*mi).second;\r
+ strDescription += strAddress.substr(0,12) + "... ";\r
+ strDescription += "(" + strLabel + ")";\r
}\r
+ else\r
+ strDescription += strAddress;\r
}\r
}\r
break;\r
string strAddress;\r
if (!mapValue["to"].empty())\r
{\r
- // Online transaction\r
+ // Sent to IP\r
strAddress = mapValue["to"];\r
}\r
else\r
{\r
- // Offline transaction\r
+ // Sent to Bitcoin Address\r
uint160 hash160;\r
if (ExtractHash160(txout.scriptPubKey, hash160))\r
strAddress = Hash160ToAddress(hash160);\r
}\r
\r
int64 nValue = txout.nValue;\r
- if (nOut == 0 && nTxFee > 0)\r
+ if (nTxFee > 0)\r
+ {\r
nValue += nTxFee;\r
+ nTxFee = 0;\r
+ }\r
\r
InsertLine(fNew, nIndex, hash, strprintf("%s-%d", strSort.c_str(), nOut),\r
strStatus,\r
\r
void CMainFrame::OnPaint(wxPaintEvent& event)\r
{\r
+ event.Skip();\r
if (fRefresh)\r
{\r
fRefresh = false;\r
Refresh();\r
}\r
- event.Skip();\r
}\r
\r
\r
\r
void CMainFrame::OnPaintListCtrl(wxPaintEvent& event)\r
{\r
+ // Skip lets the listctrl do the paint, we're just hooking the message\r
+ event.Skip();\r
+\r
if (ptaskbaricon)\r
ptaskbaricon->UpdateTooltip();\r
\r
\r
if (fDebug && GetTime() - nThreadSocketHandlerHeartbeat > 60)\r
m_statusBar->SetStatusText(" ERROR: ThreadSocketHandler has stopped", 0);\r
-\r
- // Pass through to listctrl to actually do the paint, we're just hooking the message\r
- m_listCtrl->Disconnect(wxEVT_PAINT, (wxObjectEventFunction)NULL, NULL, this);\r
- m_listCtrl->GetEventHandler()->ProcessEvent(event);\r
- m_listCtrl->Connect(wxEVT_PAINT, wxPaintEventHandler(CMainFrame::OnPaintListCtrl), NULL, this);\r
}\r
\r
\r
\r
void CMainFrame::OnMenuOptionsChangeYourAddress(wxCommandEvent& event)\r
{\r
- // Options->Change Your Address\r
- OnButtonChange(event);\r
+ // Options->Your Receiving Addresses\r
+ CAddressBookDialog dialog(this, "", CAddressBookDialog::RECEIVING, false);\r
+ if (!dialog.ShowModal())\r
+ return;\r
}\r
\r
void CMainFrame::OnMenuOptionsOptions(wxCommandEvent& event)\r
void CMainFrame::OnButtonAddressBook(wxCommandEvent& event)\r
{\r
// Toolbar: Address Book\r
- CAddressBookDialog dialogAddr(this, "", false);\r
+ CAddressBookDialog dialogAddr(this, "", CAddressBookDialog::SENDING, false);\r
if (dialogAddr.ShowModal() == 2)\r
{\r
// Send\r
- CSendDialog dialogSend(this, dialogAddr.GetAddress());\r
+ CSendDialog dialogSend(this, dialogAddr.GetSelectedAddress());\r
dialogSend.ShowModal();\r
}\r
}\r
void CMainFrame::OnSetFocusAddress(wxFocusEvent& event)\r
{\r
// Automatically select-all when entering window\r
+ event.Skip();\r
m_textCtrlAddress->SetSelection(-1, -1);\r
fOnSetFocusAddress = true;\r
- event.Skip();\r
}\r
\r
void CMainFrame::OnMouseEventsAddress(wxMouseEvent& event)\r
{\r
+ event.Skip();\r
if (fOnSetFocusAddress)\r
m_textCtrlAddress->SetSelection(-1, -1);\r
fOnSetFocusAddress = false;\r
- event.Skip();\r
}\r
\r
-void CMainFrame::OnButtonChange(wxCommandEvent& event)\r
+void CMainFrame::OnButtonNew(wxCommandEvent& event)\r
{\r
- CYourAddressDialog dialog(this, string(m_textCtrlAddress->GetValue()));\r
+ // Ask name\r
+ CGetTextFromUserDialog dialog(this,\r
+ _("New Receiving Address"),\r
+ _("It's good policy to use a new address for each payment you receive.\n\nLabel"),\r
+ "");\r
if (!dialog.ShowModal())\r
return;\r
- string strAddress = (string)dialog.GetAddress();\r
- if (strAddress != m_textCtrlAddress->GetValue())\r
- {\r
- uint160 hash160;\r
- if (!AddressToHash160(strAddress, hash160))\r
- return;\r
- if (!mapPubKeys.count(hash160))\r
- return;\r
- CWalletDB().WriteDefaultKey(mapPubKeys[hash160]);\r
- m_textCtrlAddress->SetValue(strAddress);\r
- }\r
+ string strName = dialog.GetValue();\r
+\r
+ // Generate new key\r
+ string strAddress = PubKeyToAddress(GenerateNewKey());\r
+\r
+ // Save\r
+ SetAddressBookName(strAddress, strName);\r
+ SetDefaultReceivingAddress(strAddress);\r
}\r
\r
void CMainFrame::OnButtonCopy(wxCommandEvent& event)\r
\r
\r
\r
-\r
//////////////////////////////////////////////////////////////////////////////\r
//\r
// CTxDetailsDialog\r
\r
void COptionsDialog::OnKillFocusTransactionFee(wxFocusEvent& event)\r
{\r
+ event.Skip();\r
int64 nTmp = nTransactionFee;\r
ParseMoney(m_textCtrlTransactionFee->GetValue(), nTmp);\r
m_textCtrlTransactionFee->SetValue(FormatMoney(nTmp));\r
\r
void COptionsDialog::OnKillFocusProxy(wxFocusEvent& event)\r
{\r
+ event.Skip();\r
m_textCtrlProxyIP->SetValue(GetProxyAddr().ToStringIP());\r
m_textCtrlProxyPort->SetValue(GetProxyAddr().ToStringPort());\r
}\r
void CSendDialog::OnTextAddress(wxCommandEvent& event)\r
{\r
// Check mark\r
+ event.Skip();\r
bool fBitcoinAddress = IsValidBitcoinAddress(m_textCtrlAddress->GetValue());\r
m_bitmapCheckMark->Show(fBitcoinAddress);\r
\r
void CSendDialog::OnKillFocusAmount(wxFocusEvent& event)\r
{\r
// Reformat the amount\r
+ event.Skip();\r
if (m_textCtrlAmount->GetValue().Trim().empty())\r
return;\r
int64 nTmp;\r
void CSendDialog::OnButtonAddressBook(wxCommandEvent& event)\r
{\r
// Open address book\r
- CAddressBookDialog dialog(this, m_textCtrlAddress->GetValue(), true);\r
+ CAddressBookDialog dialog(this, m_textCtrlAddress->GetValue(), CAddressBookDialog::SENDING, true);\r
if (dialog.ShowModal())\r
- m_textCtrlAddress->SetValue(dialog.GetAddress());\r
+ m_textCtrlAddress->SetValue(dialog.GetSelectedAddress());\r
}\r
\r
void CSendDialog::OnButtonPaste(wxCommandEvent& event)\r
CScript scriptPubKey;\r
scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG;\r
\r
- string strError = SendMoney(scriptPubKey, nValue, wtx);\r
- if (strError != "")\r
- wxMessageBox(strError + " ", _("Sending..."));\r
- else\r
+ string strError = SendMoney(scriptPubKey, nValue, wtx, true);\r
+ if (strError == "")\r
wxMessageBox(_("Payment sent "), _("Sending..."));\r
+ else if (strError != "ABORTED")\r
+ wxMessageBox(strError + " ", _("Sending..."));\r
}\r
else\r
{\r
\r
void CSendingDialog::OnPaint(wxPaintEvent& event)\r
{\r
+ event.Skip();\r
if (strlen(pszStatus) > 130)\r
m_textCtrlStatus->SetValue(string("\n") + pszStatus);\r
else\r
Close();\r
wxMessageBox(_("Transfer cancelled "), _("Sending..."), wxOK, this);\r
}\r
- event.Skip();\r
}\r
\r
\r
return;\r
}\r
\r
+ // Transaction fee\r
+ if (!ThreadSafeAskFee(nFeeRequired, _("Sending..."), this))\r
+ {\r
+ Error(_("Transaction aborted"));\r
+ return;\r
+ }\r
+\r
// Make sure we're still connected\r
CNode* pnode = ConnectNode(addr, 2 * 60 * 60);\r
if (!pnode)\r
return;\r
\r
// Commit\r
- if (!CommitTransactionSpent(wtx, key))\r
+ if (!CommitTransaction(wtx, key))\r
{\r
- Error(_("Error finalizing payment"));\r
+ Error(_("The transaction was rejected. This might happen if some of the coins in your wallet were already spent, such as if you used a copy of wallet.dat and coins were spent in the copy but not marked as spent here."));\r
return;\r
}\r
\r
// Send payment tx to seller, with response going to OnReply3 via event handler\r
pnode->PushRequest("submitorder", wtx, SendingDialogOnReply3, this);\r
\r
- // Accept and broadcast transaction\r
- if (!wtx.AcceptTransaction())\r
- printf("ERROR: CSendingDialog : wtxNew.AcceptTransaction() %s failed\n", wtx.GetHash().ToString().c_str());\r
- wtx.RelayWalletTransaction();\r
-\r
Status(_("Waiting for confirmation..."));\r
MainFrameRepaint();\r
}\r
\r
//////////////////////////////////////////////////////////////////////////////\r
//\r
-// CYourAddressDialog\r
+// CAddressBookDialog\r
//\r
\r
-CYourAddressDialog::CYourAddressDialog(wxWindow* parent, const string& strInitSelected) : CYourAddressDialogBase(parent)\r
+CAddressBookDialog::CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, int nPageIn, bool fDuringSendIn) : CAddressBookDialogBase(parent)\r
{\r
+ // Set initially selected page\r
+ wxNotebookEvent event;\r
+ event.SetSelection(nPageIn);\r
+ OnNotebookPageChanged(event);\r
+ m_notebook->ChangeSelection(nPageIn);\r
+\r
+ fDuringSend = fDuringSendIn;\r
+ if (!fDuringSend)\r
+ m_buttonCancel->Show(false);\r
+\r
+ // Set Icon\r
+ wxIcon iconAddressBook;\r
+ iconAddressBook.CopyFromBitmap(wxBitmap(addressbook16_xpm));\r
+ SetIcon(iconAddressBook);\r
+\r
// Init column headers\r
- m_listCtrl->InsertColumn(0, _("Label"), wxLIST_FORMAT_LEFT, 200);\r
- m_listCtrl->InsertColumn(1, _("Bitcoin Address"), wxLIST_FORMAT_LEFT, 350);\r
- m_listCtrl->SetFocus();\r
+ m_listCtrlSending->InsertColumn(0, _("Name"), wxLIST_FORMAT_LEFT, 200);\r
+ m_listCtrlSending->InsertColumn(1, _("Address"), wxLIST_FORMAT_LEFT, 350);\r
+ m_listCtrlSending->SetFocus();\r
+ m_listCtrlReceiving->InsertColumn(0, _("Label"), wxLIST_FORMAT_LEFT, 200);\r
+ m_listCtrlReceiving->InsertColumn(1, _("Bitcoin Address"), wxLIST_FORMAT_LEFT, 350);\r
+ m_listCtrlReceiving->SetFocus();\r
\r
// Fill listctrl with address book data\r
CRITICAL_BLOCK(cs_mapKeys)\r
CRITICAL_BLOCK(cs_mapAddressBook)\r
{\r
+ string strDefaultReceiving = (string)pframeMain->m_textCtrlAddress->GetValue();\r
foreach(const PAIRTYPE(string, string)& item, mapAddressBook)\r
{\r
string strAddress = item.first;\r
string strName = item.second;\r
uint160 hash160;\r
bool fMine = (AddressToHash160(strAddress, hash160) && mapPubKeys.count(hash160));\r
- if (fMine)\r
- {\r
- int nIndex = InsertLine(m_listCtrl, strName, strAddress);\r
- if (strAddress == strInitSelected)\r
- m_listCtrl->SetItemState(nIndex, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);\r
- }\r
+ wxListCtrl* plistCtrl = fMine ? m_listCtrlReceiving : m_listCtrlSending;\r
+ int nIndex = InsertLine(plistCtrl, strName, strAddress);\r
+ if (strAddress == (fMine ? strDefaultReceiving : strInitSelected))\r
+ plistCtrl->SetItemState(nIndex, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);\r
}\r
}\r
}\r
\r
-wxString CYourAddressDialog::GetAddress()\r
+wxString CAddressBookDialog::GetSelectedAddress()\r
{\r
int nIndex = GetSelection(m_listCtrl);\r
if (nIndex == -1)\r
return GetItemText(m_listCtrl, nIndex, 1);\r
}\r
\r
-void CYourAddressDialog::OnListEndLabelEdit(wxListEvent& event)\r
+wxString CAddressBookDialog::GetSelectedSendingAddress()\r
{\r
- // Update address book with edited name\r
- if (event.IsEditCancelled())\r
- return;\r
- string strAddress = (string)GetItemText(m_listCtrl, event.GetIndex(), 1);\r
- SetAddressBookName(strAddress, string(event.GetText()));\r
- pframeMain->RefreshListCtrl();\r
+ int nIndex = GetSelection(m_listCtrlSending);\r
+ if (nIndex == -1)\r
+ return "";\r
+ return GetItemText(m_listCtrlSending, nIndex, 1);\r
}\r
\r
-void CYourAddressDialog::OnListItemSelected(wxListEvent& event)\r
+wxString CAddressBookDialog::GetSelectedReceivingAddress()\r
{\r
+ int nIndex = GetSelection(m_listCtrlReceiving);\r
+ if (nIndex == -1)\r
+ return "";\r
+ return GetItemText(m_listCtrlReceiving, nIndex, 1);\r
}\r
\r
-void CYourAddressDialog::OnListItemActivated(wxListEvent& event)\r
+void CAddressBookDialog::OnNotebookPageChanged(wxNotebookEvent& event)\r
{\r
- // Doubleclick edits item\r
- wxCommandEvent event2;\r
- OnButtonRename(event2);\r
+ event.Skip();\r
+ nPage = event.GetSelection();\r
+ if (nPage == SENDING)\r
+ m_listCtrl = m_listCtrlSending;\r
+ else if (nPage == RECEIVING)\r
+ m_listCtrl = m_listCtrlReceiving;\r
+ m_buttonDelete->Show(nPage == SENDING);\r
+ m_buttonCopy->Show(nPage == RECEIVING);\r
+ this->Layout();\r
+ m_listCtrl->SetFocus();\r
}\r
\r
-void CYourAddressDialog::OnButtonRename(wxCommandEvent& event)\r
+void CAddressBookDialog::OnListEndLabelEdit(wxListEvent& event)\r
{\r
- // Ask new name\r
- int nIndex = GetSelection(m_listCtrl);\r
- if (nIndex == -1)\r
- return;\r
- string strName = (string)m_listCtrl->GetItemText(nIndex);\r
- string strAddress = (string)GetItemText(m_listCtrl, nIndex, 1);\r
- CGetTextFromUserDialog dialog(this, _("Edit Address Label"), _("New Label"), strName);\r
- if (!dialog.ShowModal())\r
+ // Update address book with edited name\r
+ event.Skip();\r
+ if (event.IsEditCancelled())\r
return;\r
- strName = dialog.GetValue();\r
-\r
- // Change name\r
- SetAddressBookName(strAddress, strName);\r
- m_listCtrl->SetItemText(nIndex, strName);\r
+ string strAddress = (string)GetItemText(m_listCtrl, event.GetIndex(), 1);\r
+ SetAddressBookName(strAddress, string(event.GetText()));\r
pframeMain->RefreshListCtrl();\r
}\r
\r
-void CYourAddressDialog::OnButtonNew(wxCommandEvent& event)\r
+void CAddressBookDialog::OnListItemSelected(wxListEvent& event)\r
{\r
- // Ask name\r
- CGetTextFromUserDialog dialog(this, _("New Bitcoin Address"), _("Label"), "");\r
- if (!dialog.ShowModal())\r
- return;\r
- string strName = dialog.GetValue();\r
-\r
- // Generate new key\r
- string strAddress = PubKeyToAddress(GenerateNewKey());\r
- SetAddressBookName(strAddress, strName);\r
-\r
- // Add to list and select it\r
- int nIndex = InsertLine(m_listCtrl, strName, strAddress);\r
- SetSelection(m_listCtrl, nIndex);\r
- m_listCtrl->SetFocus();\r
+ event.Skip();\r
+ if (nPage == RECEIVING)\r
+ SetDefaultReceivingAddress((string)GetSelectedReceivingAddress());\r
}\r
\r
-void CYourAddressDialog::OnButtonCopy(wxCommandEvent& event)\r
+void CAddressBookDialog::OnListItemActivated(wxListEvent& event)\r
{\r
- // Copy address box to clipboard\r
- if (wxTheClipboard->Open())\r
+ event.Skip();\r
+ if (fDuringSend)\r
{\r
- wxTheClipboard->SetData(new wxTextDataObject(GetAddress()));\r
- wxTheClipboard->Close();\r
+ // Doubleclick returns selection\r
+ EndModal(GetSelectedAddress() != "" ? 2 : 0);\r
+ return;\r
}\r
-}\r
\r
-void CYourAddressDialog::OnButtonOK(wxCommandEvent& event)\r
-{\r
- // OK\r
- EndModal(true);\r
-}\r
-\r
-void CYourAddressDialog::OnButtonCancel(wxCommandEvent& event)\r
-{\r
- // Cancel\r
- EndModal(false);\r
-}\r
-\r
-void CYourAddressDialog::OnClose(wxCloseEvent& event)\r
-{\r
- // Close\r
- EndModal(false);\r
+ // Doubleclick edits item\r
+ wxCommandEvent event2;\r
+ OnButtonEdit(event2);\r
}\r
\r
-\r
-\r
-\r
-\r
-\r
-//////////////////////////////////////////////////////////////////////////////\r
-//\r
-// CAddressBookDialog\r
-//\r
-\r
-CAddressBookDialog::CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, bool fSendingIn) : CAddressBookDialogBase(parent)\r
+void CAddressBookDialog::OnButtonDelete(wxCommandEvent& event)\r
{\r
- fSending = fSendingIn;\r
- if (!fSending)\r
- m_buttonCancel->Show(false);\r
-\r
- // Init column headers\r
- m_listCtrl->InsertColumn(0, _("Name"), wxLIST_FORMAT_LEFT, 200);\r
- m_listCtrl->InsertColumn(1, _("Address"), wxLIST_FORMAT_LEFT, 350);\r
- m_listCtrl->SetFocus();\r
-\r
- // Set Icon\r
- wxIcon iconAddressBook;\r
- iconAddressBook.CopyFromBitmap(wxBitmap(addressbook16_xpm));\r
- SetIcon(iconAddressBook);\r
-\r
- // Fill listctrl with address book data\r
- CRITICAL_BLOCK(cs_mapKeys)\r
- CRITICAL_BLOCK(cs_mapAddressBook)\r
+ if (nPage != SENDING)\r
+ return;\r
+ for (int nIndex = m_listCtrl->GetItemCount()-1; nIndex >= 0; nIndex--)\r
{\r
- foreach(const PAIRTYPE(string, string)& item, mapAddressBook)\r
+ if (m_listCtrl->GetItemState(nIndex, wxLIST_STATE_SELECTED))\r
{\r
- string strAddress = item.first;\r
- string strName = item.second;\r
- uint160 hash160;\r
- bool fMine = (AddressToHash160(strAddress, hash160) && mapPubKeys.count(hash160));\r
- if (!fMine)\r
- {\r
- int nIndex = InsertLine(m_listCtrl, strName, strAddress);\r
- if (strAddress == strInitSelected)\r
- m_listCtrl->SetItemState(nIndex, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED, wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED);\r
- }\r
+ string strAddress = (string)GetItemText(m_listCtrl, nIndex, 1);\r
+ CWalletDB().EraseName(strAddress);\r
+ m_listCtrl->DeleteItem(nIndex);\r
}\r
}\r
-}\r
-\r
-wxString CAddressBookDialog::GetAddress()\r
-{\r
- int nIndex = GetSelection(m_listCtrl);\r
- if (nIndex == -1)\r
- return "";\r
- return GetItemText(m_listCtrl, nIndex, 1);\r
-}\r
-\r
-void CAddressBookDialog::OnListEndLabelEdit(wxListEvent& event)\r
-{\r
- // Update address book with edited name\r
- if (event.IsEditCancelled())\r
- return;\r
- string strAddress = (string)GetItemText(m_listCtrl, event.GetIndex(), 1);\r
- SetAddressBookName(strAddress, string(event.GetText()));\r
pframeMain->RefreshListCtrl();\r
}\r
\r
-void CAddressBookDialog::OnListItemSelected(wxListEvent& event)\r
-{\r
-}\r
-\r
-void CAddressBookDialog::OnListItemActivated(wxListEvent& event)\r
+void CAddressBookDialog::OnButtonCopy(wxCommandEvent& event)\r
{\r
- if (fSending)\r
- {\r
- // Doubleclick returns selection\r
- EndModal(GetAddress() != "" ? 2 : 0);\r
- }\r
- else\r
+ // Copy address box to clipboard\r
+ if (wxTheClipboard->Open())\r
{\r
- // Doubleclick edits item\r
- wxCommandEvent event2;\r
- OnButtonEdit(event2);\r
+ wxTheClipboard->SetData(new wxTextDataObject(GetSelectedAddress()));\r
+ wxTheClipboard->Close();\r
}\r
}\r
\r
\r
void CAddressBookDialog::OnButtonEdit(wxCommandEvent& event)\r
{\r
- // Ask new name\r
int nIndex = GetSelection(m_listCtrl);\r
if (nIndex == -1)\r
return;\r
string strName = (string)m_listCtrl->GetItemText(nIndex);\r
string strAddress = (string)GetItemText(m_listCtrl, nIndex, 1);\r
string strAddressOrg = strAddress;\r
- do\r
+\r
+ if (nPage == SENDING)\r
{\r
- CGetTextFromUserDialog dialog(this, _("Edit Address"), _("Name"), strName, _("Address"), strAddress);\r
+ // Ask name and address\r
+ do\r
+ {\r
+ CGetTextFromUserDialog dialog(this, _("Edit Address"), _("Name"), strName, _("Address"), strAddress);\r
+ if (!dialog.ShowModal())\r
+ return;\r
+ strName = dialog.GetValue1();\r
+ strAddress = dialog.GetValue2();\r
+ }\r
+ while (CheckIfMine(strAddress, _("Edit Address")));\r
+\r
+ }\r
+ else if (nPage == RECEIVING)\r
+ {\r
+ // Ask name\r
+ CGetTextFromUserDialog dialog(this, _("Edit Address Label"), _("Label"), strName);\r
if (!dialog.ShowModal())\r
return;\r
- strName = dialog.GetValue1();\r
- strAddress = dialog.GetValue2();\r
+ strName = dialog.GetValue();\r
}\r
- while (CheckIfMine(strAddress, _("Edit Address")));\r
\r
- // Change name\r
+ // Write back\r
if (strAddress != strAddressOrg)\r
CWalletDB().EraseName(strAddressOrg);\r
SetAddressBookName(strAddress, strName);\r
\r
void CAddressBookDialog::OnButtonNew(wxCommandEvent& event)\r
{\r
- // Ask name\r
string strName;\r
string strAddress;\r
- do\r
+\r
+ if (nPage == SENDING)\r
{\r
- CGetTextFromUserDialog dialog(this, _("New Address"), _("Name"), strName, _("Address"), strAddress);\r
+ // Ask name and address\r
+ do\r
+ {\r
+ CGetTextFromUserDialog dialog(this, _("Add Address"), _("Name"), strName, _("Address"), strAddress);\r
+ if (!dialog.ShowModal())\r
+ return;\r
+ strName = dialog.GetValue1();\r
+ strAddress = dialog.GetValue2();\r
+ }\r
+ while (CheckIfMine(strAddress, _("Add Address")));\r
+ }\r
+ else if (nPage == RECEIVING)\r
+ {\r
+ // Ask name\r
+ CGetTextFromUserDialog dialog(this,\r
+ _("New Receiving Address"),\r
+ _("It's good policy to use a new address for each payment you receive.\n\nLabel"),\r
+ "");\r
if (!dialog.ShowModal())\r
return;\r
- strName = dialog.GetValue1();\r
- strAddress = dialog.GetValue2();\r
+ strName = dialog.GetValue();\r
+\r
+ // Generate new key\r
+ strAddress = PubKeyToAddress(GenerateNewKey());\r
}\r
- while (CheckIfMine(strAddress, _("New Address")));\r
\r
// Add to list and select it\r
SetAddressBookName(strAddress, strName);\r
int nIndex = InsertLine(m_listCtrl, strName, strAddress);\r
SetSelection(m_listCtrl, nIndex);\r
m_listCtrl->SetFocus();\r
- pframeMain->RefreshListCtrl();\r
-}\r
-\r
-void CAddressBookDialog::OnButtonDelete(wxCommandEvent& event)\r
-{\r
- for (int nIndex = m_listCtrl->GetItemCount()-1; nIndex >= 0; nIndex--)\r
- {\r
- if (m_listCtrl->GetItemState(nIndex, wxLIST_STATE_SELECTED))\r
- {\r
- string strAddress = (string)GetItemText(m_listCtrl, nIndex, 1);\r
- CWalletDB().EraseName(strAddress);\r
- m_listCtrl->DeleteItem(nIndex);\r
- }\r
- }\r
- pframeMain->RefreshListCtrl();\r
-}\r
-\r
-void CAddressBookDialog::OnButtonCopy(wxCommandEvent& event)\r
-{\r
- // Copy address box to clipboard\r
- if (wxTheClipboard->Open())\r
- {\r
- wxTheClipboard->SetData(new wxTextDataObject(GetAddress()));\r
- wxTheClipboard->Close();\r
- }\r
+ if (nPage == SENDING)\r
+ pframeMain->RefreshListCtrl();\r
}\r
\r
void CAddressBookDialog::OnButtonOK(wxCommandEvent& event)\r
{\r
// OK\r
- EndModal(GetAddress() != "" ? 1 : 0);\r
+ EndModal(GetSelectedAddress() != "" ? 1 : 0);\r
}\r
\r
void CAddressBookDialog::OnButtonCancel(wxCommandEvent& event)\r
wxString strUsage = string() +\r
_("Usage: bitcoin [options]") + "\t\t\t\t\t\t\n" +\r
_("Options:\n") +\r
- " -gen \t\t " + _("Generate coins\n") +\r
- " -gen=0 \t\t " + _("Don't generate coins\n") +\r
- " -min \t\t " + _("Start minimized\n") +\r
- " -datadir=<dir> \t " + _("Specify data directory\n") +\r
- " -proxy=<ip:port>\t " + _("Connect through socks4 proxy\n") +\r
- " -addnode=<ip> \t " + _("Add a node to connect to\n") +\r
- " -connect=<ip> \t " + _("Connect only to the specified node\n") +\r
- " -? \t\t " + _("This help message\n");\r
+ " -gen \t\t " + _("Generate coins\n") +\r
+ " -gen=0 \t\t " + _("Don't generate coins\n") +\r
+ " -min \t\t " + _("Start minimized\n") +\r
+ " -datadir=<dir> \t " + _("Specify data directory\n") +\r
+ " -proxy=<ip:port>\t " + _("Connect through socks4 proxy\n") +\r
+ " -addnode=<ip> \t " + _("Add a node to connect to\n") +\r
+ " -connect=<ip> \t " + _("Connect only to the specified node\n") +\r
+ " -? \t\t " + _("This help message\n");\r
\r
if (fWindows)\r
{\r
Sleep(1000);\r
throw;\r
}\r
-\r
return true;\r
}\r
\r
// Distributed under the MIT/X11 software license, see the accompanying\r
// file license.txt or http://www.opensource.org/licenses/mit-license.php.\r
\r
-\r
-\r
-\r
DECLARE_EVENT_TYPE(wxEVT_UITHREADCALL, -1)\r
\r
+\r
extern map<string, string> mapArgs;\r
\r
// Settings\r
void MainFrameRepaint();\r
void Shutdown(void* parg);\r
int ThreadSafeMessageBox(const string& message, const string& caption="Message", int style=wxOK, wxWindow* parent=NULL, int x=-1, int y=-1);\r
+bool ThreadSafeAskFee(int64 nFeeRequired, const string& strCaption, wxWindow* parent);\r
\r
\r
\r
void OnButtonAddressBook(wxCommandEvent& event);\r
void OnSetFocusAddress(wxFocusEvent& event);\r
void OnMouseEventsAddress(wxMouseEvent& event);\r
- void OnButtonChange(wxCommandEvent& event);\r
+ void OnButtonNew(wxCommandEvent& event);\r
void OnButtonCopy(wxCommandEvent& event);\r
void OnListColBeginDrag(wxListEvent& event);\r
void OnListItemActivated(wxListEvent& event);\r
\r
\r
\r
-class CYourAddressDialog : public CYourAddressDialogBase\r
-{\r
-protected:\r
- // Event handlers\r
- void OnListEndLabelEdit(wxListEvent& event);\r
- void OnListItemSelected(wxListEvent& event);\r
- void OnListItemActivated(wxListEvent& event);\r
- void OnButtonRename(wxCommandEvent& event);\r
- void OnButtonNew(wxCommandEvent& event);\r
- void OnButtonCopy(wxCommandEvent& event);\r
- void OnButtonOK(wxCommandEvent& event);\r
- void OnButtonCancel(wxCommandEvent& event);\r
- void OnClose(wxCloseEvent& event);\r
-\r
-public:\r
- /** Constructor */\r
- CYourAddressDialog(wxWindow* parent);\r
- CYourAddressDialog(wxWindow* parent, const string& strInitSelected);\r
-\r
- // Custom\r
- wxString GetAddress();\r
-};\r
-\r
-\r
-\r
class CAddressBookDialog : public CAddressBookDialogBase\r
{\r
protected:\r
// Event handlers\r
+ void OnNotebookPageChanged(wxNotebookEvent& event);\r
void OnListEndLabelEdit(wxListEvent& event);\r
void OnListItemSelected(wxListEvent& event);\r
void OnListItemActivated(wxListEvent& event);\r
- void OnButtonEdit(wxCommandEvent& event);\r
void OnButtonDelete(wxCommandEvent& event);\r
- void OnButtonNew(wxCommandEvent& event);\r
void OnButtonCopy(wxCommandEvent& event);\r
+ void OnButtonEdit(wxCommandEvent& event);\r
+ void OnButtonNew(wxCommandEvent& event);\r
void OnButtonOK(wxCommandEvent& event);\r
void OnButtonCancel(wxCommandEvent& event);\r
void OnClose(wxCloseEvent& event);\r
\r
public:\r
/** Constructor */\r
- CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, bool fSendingIn);\r
+ CAddressBookDialog(wxWindow* parent, const wxString& strInitSelected, int nPageIn, bool fDuringSendIn);\r
\r
// Custom\r
- bool fSending;\r
+ enum\r
+ {\r
+ SENDING = 0,\r
+ RECEIVING = 1,\r
+ };\r
+ int nPage;\r
+ wxListCtrl* m_listCtrl;\r
+ bool fDuringSend;\r
wxString GetAddress();\r
+ wxString GetSelectedAddress();\r
+ wxString GetSelectedSendingAddress();\r
+ wxString GetSelectedReceivingAddress();\r
bool CheckIfMine(const string& strAddress, const string& strTitle);\r
};\r
\r
const string& strMessage2="",\r
const string& strValue2="") : CGetTextFromUserDialogBase(parent, wxID_ANY, strCaption)\r
{\r
+ int x = GetSize().GetWidth();\r
+ int y = GetSize().GetHeight();\r
m_staticTextMessage1->SetLabel(strMessage1);\r
m_textCtrl1->SetValue(strValue1);\r
+ y += wxString(strMessage1).Freq('\n') * 14;\r
if (!strMessage2.empty())\r
{\r
m_staticTextMessage2->Show(true);\r
m_staticTextMessage2->SetLabel(strMessage2);\r
m_textCtrl2->Show(true);\r
m_textCtrl2->SetValue(strValue2);\r
- SetSize(wxDefaultCoord, 180);\r
+ y += 46 + wxString(strMessage2).Freq('\n') * 14;\r
}\r
if (!fWindows)\r
- SetSize(1.14 * GetSize().GetWidth(), 1.14 * GetSize().GetHeight());\r
+ {\r
+ x *= 1.14;\r
+ y *= 1.14;\r
+ }\r
+ SetSize(x, y);\r
}\r
\r
// Custom\r
m_menuOptions->Append( m_menuOptionsGenerateBitcoins );\r
\r
wxMenuItem* m_menuOptionsChangeYourAddress;\r
- m_menuOptionsChangeYourAddress = new wxMenuItem( m_menuOptions, wxID_ANY, wxString( _("&Change Your Address...") ) , wxEmptyString, wxITEM_NORMAL );\r
+ m_menuOptionsChangeYourAddress = new wxMenuItem( m_menuOptions, wxID_ANY, wxString( _("&Your Receiving Addresses...") ) , wxEmptyString, wxITEM_NORMAL );\r
m_menuOptions->Append( m_menuOptionsChangeYourAddress );\r
\r
wxMenuItem* m_menuOptionsOptions;\r
m_menuOptionsOptions = new wxMenuItem( m_menuOptions, wxID_MENUOPTIONSOPTIONS, wxString( _("&Options...") ) , wxEmptyString, wxITEM_NORMAL );\r
m_menuOptions->Append( m_menuOptionsOptions );\r
\r
- m_menubar->Append( m_menuOptions, _("&Options") );\r
+ m_menubar->Append( m_menuOptions, _("&Settings") );\r
\r
m_menuHelp = new wxMenu();\r
wxMenuItem* m_menuHelpAbout;\r
m_toolBar->SetToolSeparation( 1 );\r
m_toolBar->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) );\r
\r
- m_toolBar->AddTool( wxID_BUTTONSEND, _("&Send Coins"), wxBitmap( send20_xpm ), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString );\r
- m_toolBar->AddTool( wxID_BUTTONRECEIVE, _("&Address Book"), wxBitmap( addressbook20_xpm ), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString );\r
+ m_toolBar->AddTool( wxID_BUTTONSEND, _("Send Coins"), wxBitmap( send20_xpm ), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString );\r
+ m_toolBar->AddTool( wxID_BUTTONRECEIVE, _("Address Book"), wxBitmap( addressbook20_xpm ), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString );\r
m_toolBar->Realize();\r
\r
m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );\r
bSizer85->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );\r
\r
m_textCtrlAddress = new wxTextCtrl( this, wxID_TEXTCTRLADDRESS, wxEmptyString, wxDefaultPosition, wxSize( 340,-1 ), wxTE_READONLY );\r
- m_textCtrlAddress->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_MENU ) );\r
- \r
bSizer85->Add( m_textCtrlAddress, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );\r
\r
- m_buttonNew = new wxButton( this, wxID_BUTTONCHANGE, _("&New..."), wxDefaultPosition, wxDefaultSize, 0 );\r
- m_buttonNew->Hide();\r
- \r
- bSizer85->Add( m_buttonNew, 0, wxRIGHT, 5 );\r
+ m_buttonNew = new wxButton( this, wxID_BUTTONNEW, _(" &New... "), wxDefaultPosition, wxSize( -1,-1 ), wxBU_EXACTFIT );\r
+ bSizer85->Add( m_buttonNew, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 5 );\r
\r
m_buttonCopy = new wxButton( this, wxID_BUTTONCOPY, _(" &Copy to Clipboard "), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT );\r
bSizer85->Add( m_buttonCopy, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );\r
m_textCtrlAddress->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );\r
m_textCtrlAddress->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );\r
m_textCtrlAddress->Connect( wxEVT_SET_FOCUS, wxFocusEventHandler( CMainFrameBase::OnSetFocusAddress ), NULL, this );\r
- m_buttonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonChange ), NULL, this );\r
+ m_buttonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonNew ), NULL, this );\r
m_buttonCopy->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonCopy ), NULL, this );\r
m_listCtrl->Connect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );\r
m_listCtrl->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );\r
m_textCtrlAddress->Disconnect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );\r
m_textCtrlAddress->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEventsAddress ), NULL, this );\r
m_textCtrlAddress->Disconnect( wxEVT_SET_FOCUS, wxFocusEventHandler( CMainFrameBase::OnSetFocusAddress ), NULL, this );\r
- m_buttonNew->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonChange ), NULL, this );\r
+ m_buttonNew->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonNew ), NULL, this );\r
m_buttonCopy->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CMainFrameBase::OnButtonCopy ), NULL, this );\r
m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, wxListEventHandler( CMainFrameBase::OnListColBeginDrag ), NULL, this );\r
m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CMainFrameBase::OnListItemActivated ), NULL, this );\r
{\r
this->SetSizeHints( wxDefaultSize, wxDefaultSize );\r
\r
+ wxBoxSizer* bSizer58;\r
+ bSizer58 = new wxBoxSizer( wxVERTICAL );\r
+ \r
+ m_notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );\r
+ m_panelSending = new wxPanel( m_notebook, wxID_PANELSENDING, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
wxBoxSizer* bSizer68;\r
bSizer68 = new wxBoxSizer( wxVERTICAL );\r
\r
\r
- bSizer68->Add( 0, 5, 0, wxEXPAND, 5 );\r
+ bSizer68->Add( 0, 0, 0, wxEXPAND, 5 );\r
\r
- m_staticText55 = new wxStaticText( this, wxID_ANY, _("Bitcoin Address"), wxDefaultPosition, wxDefaultSize, 0 );\r
+ m_staticText55 = new wxStaticText( m_panelSending, wxID_ANY, _("Bitcoin Address"), wxDefaultPosition, wxDefaultSize, 0 );\r
m_staticText55->Wrap( -1 );\r
m_staticText55->Hide();\r
\r
bSizer68->Add( m_staticText55, 0, wxTOP|wxRIGHT|wxLEFT, 5 );\r
\r
- m_listCtrl = new wxListCtrl( this, wxID_LISTCTRL, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING );\r
- bSizer68->Add( m_listCtrl, 1, wxALL|wxEXPAND, 5 );\r
+ m_listCtrlSending = new wxListCtrl( m_panelSending, wxID_LISTCTRLSENDING, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING );\r
+ bSizer68->Add( m_listCtrlSending, 1, wxALL|wxEXPAND, 5 );\r
+ \r
+ m_panelSending->SetSizer( bSizer68 );\r
+ m_panelSending->Layout();\r
+ bSizer68->Fit( m_panelSending );\r
+ m_notebook->AddPage( m_panelSending, _("Sending"), false );\r
+ m_panelReceiving = new wxPanel( m_notebook, wxID_PANELRECEIVING, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );\r
+ wxBoxSizer* bSizer681;\r
+ bSizer681 = new wxBoxSizer( wxVERTICAL );\r
+ \r
+ \r
+ bSizer681->Add( 0, 0, 0, wxEXPAND, 5 );\r
+ \r
+ m_staticText45 = new wxStaticText( m_panelReceiving, wxID_ANY, _("These are your Bitcoin addresses for receiving payments. You can give a different one to each sender to keep track of who is paying you. The highlighted address will be displayed in the main window."), wxDefaultPosition, wxDefaultSize, 0 );\r
+ m_staticText45->Wrap( 570 );\r
+ bSizer681->Add( m_staticText45, 0, wxTOP|wxRIGHT|wxLEFT, 6 );\r
+ \r
+ \r
+ bSizer681->Add( 0, 2, 0, wxEXPAND, 5 );\r
+ \r
+ m_listCtrlReceiving = new wxListCtrl( m_panelReceiving, wxID_LISTCTRLRECEIVING, wxDefaultPosition, wxDefaultSize, wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING );\r
+ bSizer681->Add( m_listCtrlReceiving, 1, wxALL|wxEXPAND, 5 );\r
+ \r
+ m_panelReceiving->SetSizer( bSizer681 );\r
+ m_panelReceiving->Layout();\r
+ bSizer681->Fit( m_panelReceiving );\r
+ m_notebook->AddPage( m_panelReceiving, _("Receiving"), true );\r
+ \r
+ bSizer58->Add( m_notebook, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );\r
\r
wxBoxSizer* bSizer69;\r
bSizer69 = new wxBoxSizer( wxHORIZONTAL );\r
\r
bSizer69->Add( 0, 0, 1, wxEXPAND, 5 );\r
\r
+ m_buttonDelete = new wxButton( this, wxID_BUTTONDELETE, _("&Delete"), wxDefaultPosition, wxDefaultSize, 0 );\r
+ bSizer69->Add( m_buttonDelete, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );\r
+ \r
+ m_buttonCopy = new wxButton( this, wxID_BUTTONCOPY, _(" &Copy to Clipboard "), wxDefaultPosition, wxSize( -1,-1 ), 0 );\r
+ bSizer69->Add( m_buttonCopy, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );\r
+ \r
m_buttonEdit = new wxButton( this, wxID_BUTTONEDIT, _("&Edit..."), wxDefaultPosition, wxDefaultSize, 0 );\r
bSizer69->Add( m_buttonEdit, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );\r
\r
m_buttonNew = new wxButton( this, wxID_BUTTONNEW, _(" &New Address... "), wxDefaultPosition, wxDefaultSize, 0 );\r
bSizer69->Add( m_buttonNew, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );\r
\r
- m_buttonDelete = new wxButton( this, wxID_BUTTONDELETE, _("&Delete"), wxDefaultPosition, wxDefaultSize, 0 );\r
- bSizer69->Add( m_buttonDelete, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );\r
- \r
m_buttonOK = new wxButton( this, wxID_OK, _("OK"), wxDefaultPosition, wxSize( -1,-1 ), 0 );\r
bSizer69->Add( m_buttonOK, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );\r
\r
m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxSize( -1,-1 ), 0 );\r
bSizer69->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );\r
\r
- bSizer68->Add( bSizer69, 0, wxEXPAND, 5 );\r
+ bSizer58->Add( bSizer69, 0, wxEXPAND, 5 );\r
\r
- this->SetSizer( bSizer68 );\r
+ this->SetSizer( bSizer58 );\r
this->Layout();\r
\r
// Connect Events\r
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CAddressBookDialogBase::OnClose ) );\r
- m_listCtrl->Connect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );\r
- m_listCtrl->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );\r
- m_listCtrl->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );\r
+ m_notebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( CAddressBookDialogBase::OnNotebookPageChanged ), NULL, this );\r
+ m_listCtrlSending->Connect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );\r
+ m_listCtrlSending->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );\r
+ m_listCtrlSending->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );\r
+ m_listCtrlReceiving->Connect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );\r
+ m_listCtrlReceiving->Connect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );\r
+ m_listCtrlReceiving->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );\r
+ m_buttonDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonDelete ), NULL, this );\r
+ m_buttonCopy->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCopy ), NULL, this );\r
m_buttonEdit->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonEdit ), NULL, this );\r
m_buttonNew->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonNew ), NULL, this );\r
- m_buttonDelete->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonDelete ), NULL, this );\r
m_buttonOK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonOK ), NULL, this );\r
m_buttonCancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCancel ), NULL, this );\r
}\r
{\r
// Disconnect Events\r
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( CAddressBookDialogBase::OnClose ) );\r
- m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );\r
- m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );\r
- m_listCtrl->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );\r
+ m_notebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( CAddressBookDialogBase::OnNotebookPageChanged ), NULL, this );\r
+ m_listCtrlSending->Disconnect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );\r
+ m_listCtrlSending->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );\r
+ m_listCtrlSending->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );\r
+ m_listCtrlReceiving->Disconnect( wxEVT_COMMAND_LIST_END_LABEL_EDIT, wxListEventHandler( CAddressBookDialogBase::OnListEndLabelEdit ), NULL, this );\r
+ m_listCtrlReceiving->Disconnect( wxEVT_COMMAND_LIST_ITEM_ACTIVATED, wxListEventHandler( CAddressBookDialogBase::OnListItemActivated ), NULL, this );\r
+ m_listCtrlReceiving->Disconnect( wxEVT_COMMAND_LIST_ITEM_SELECTED, wxListEventHandler( CAddressBookDialogBase::OnListItemSelected ), NULL, this );\r
+ m_buttonDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonDelete ), NULL, this );\r
+ m_buttonCopy->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCopy ), NULL, this );\r
m_buttonEdit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonEdit ), NULL, this );\r
m_buttonNew->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonNew ), NULL, this );\r
- m_buttonDelete->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonDelete ), NULL, this );\r
m_buttonOK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonOK ), NULL, this );\r
m_buttonCancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CAddressBookDialogBase::OnButtonCancel ), NULL, this );\r
}\r
#include <wx/spinctrl.h>\r
#include <wx/scrolwin.h>\r
#include <wx/statbmp.h>\r
+#include <wx/notebook.h>\r
\r
///////////////////////////////////////////////////////////////////////////\r
\r
#define wxID_BUTTONSEND 1004\r
#define wxID_BUTTONRECEIVE 1005\r
#define wxID_TEXTCTRLADDRESS 1006\r
-#define wxID_BUTTONCHANGE 1007\r
+#define wxID_BUTTONNEW 1007\r
#define wxID_BUTTONCOPY 1008\r
#define wxID_TRANSACTIONFEE 1009\r
#define wxID_PROXYIP 1010\r
#define wxID_CHOICETRANSFERTYPE 1016\r
#define wxID_LISTCTRL 1017\r
#define wxID_BUTTONRENAME 1018\r
-#define wxID_BUTTONNEW 1019\r
-#define wxID_BUTTONEDIT 1020\r
-#define wxID_BUTTONDELETE 1021\r
-#define wxID_TEXTCTRL 1022\r
+#define wxID_PANELSENDING 1019\r
+#define wxID_LISTCTRLSENDING 1020\r
+#define wxID_PANELRECEIVING 1021\r
+#define wxID_LISTCTRLRECEIVING 1022\r
+#define wxID_BUTTONDELETE 1023\r
+#define wxID_BUTTONEDIT 1024\r
+#define wxID_TEXTCTRL 1025\r
\r
///////////////////////////////////////////////////////////////////////////////\r
/// Class CMainFrameBase\r
wxStatusBar* m_statusBar;\r
\r
wxStaticText* m_staticText32;\r
- wxTextCtrl* m_textCtrlAddress;\r
wxButton* m_buttonNew;\r
wxButton* m_buttonCopy;\r
\r
virtual void OnKeyDown( wxKeyEvent& event ){ event.Skip(); }\r
virtual void OnMouseEventsAddress( wxMouseEvent& event ){ event.Skip(); }\r
virtual void OnSetFocusAddress( wxFocusEvent& event ){ event.Skip(); }\r
- virtual void OnButtonChange( wxCommandEvent& event ){ event.Skip(); }\r
+ virtual void OnButtonNew( wxCommandEvent& event ){ event.Skip(); }\r
virtual void OnButtonCopy( wxCommandEvent& event ){ event.Skip(); }\r
virtual void OnListColBeginDrag( wxListEvent& event ){ event.Skip(); }\r
virtual void OnListItemActivated( wxListEvent& event ){ event.Skip(); }\r
\r
public:\r
wxMenu* m_menuOptions;\r
+ wxTextCtrl* m_textCtrlAddress;\r
wxListCtrl* m_listCtrl;\r
CMainFrameBase( wxWindow* parent, wxWindowID id = wxID_MAINFRAME, const wxString& title = _("Bitcoin"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 712,484 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL );\r
~CMainFrameBase();\r
private:\r
\r
protected:\r
+ wxNotebook* m_notebook;\r
+ wxPanel* m_panelSending;\r
\r
wxStaticText* m_staticText55;\r
- wxListCtrl* m_listCtrl;\r
+ wxListCtrl* m_listCtrlSending;\r
+ wxPanel* m_panelReceiving;\r
+ \r
+ wxStaticText* m_staticText45;\r
+ \r
+ wxListCtrl* m_listCtrlReceiving;\r
\r
+ wxButton* m_buttonDelete;\r
+ wxButton* m_buttonCopy;\r
wxButton* m_buttonEdit;\r
wxButton* m_buttonNew;\r
- wxButton* m_buttonDelete;\r
wxButton* m_buttonOK;\r
\r
// Virtual event handlers, overide them in your derived class\r
virtual void OnClose( wxCloseEvent& event ){ event.Skip(); }\r
+ virtual void OnNotebookPageChanged( wxNotebookEvent& event ){ event.Skip(); }\r
virtual void OnListEndLabelEdit( wxListEvent& event ){ event.Skip(); }\r
virtual void OnListItemActivated( wxListEvent& event ){ event.Skip(); }\r
virtual void OnListItemSelected( wxListEvent& event ){ event.Skip(); }\r
+ virtual void OnButtonDelete( wxCommandEvent& event ){ event.Skip(); }\r
+ virtual void OnButtonCopy( wxCommandEvent& event ){ event.Skip(); }\r
virtual void OnButtonEdit( wxCommandEvent& event ){ event.Skip(); }\r
virtual void OnButtonNew( wxCommandEvent& event ){ event.Skip(); }\r
- virtual void OnButtonDelete( wxCommandEvent& event ){ event.Skip(); }\r
virtual void OnButtonOK( wxCommandEvent& event ){ event.Skip(); }\r
virtual void OnButtonCancel( wxCommandEvent& event ){ event.Skip(); }\r
\r
\r
\r
public:\r
- CGetTextFromUserDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 403,138 ), long style = wxDEFAULT_DIALOG_STYLE );\r
+ CGetTextFromUserDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 440,138 ), long style = wxDEFAULT_DIALOG_STYLE );\r
~CGetTextFromUserDialogBase();\r
\r
};\r
</object>\r
</object>\r
<object class="wxMenu" expanded="1">\r
- <property name="label">&Options</property>\r
+ <property name="label">&Settings</property>\r
<property name="name">m_menuOptions</property>\r
<property name="permission">public</property>\r
<object class="wxMenuItem" expanded="1">\r
<property name="help"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="kind">wxITEM_NORMAL</property>\r
- <property name="label">&Change Your Address...</property>\r
+ <property name="label">&Your Receiving Addresses...</property>\r
<property name="name">m_menuOptionsChangeYourAddress</property>\r
<property name="permission">none</property>\r
<property name="shortcut"></property>\r
<property name="bitmap">xpm/send20.xpm; Load From File</property>\r
<property name="id">wxID_BUTTONSEND</property>\r
<property name="kind">wxITEM_NORMAL</property>\r
- <property name="label">&Send Coins</property>\r
+ <property name="label">Send Coins</property>\r
<property name="name">m_tool1</property>\r
<property name="statusbar"></property>\r
<property name="tooltip"></property>\r
<property name="bitmap">xpm/addressbook20.xpm; Load From File</property>\r
<property name="id">wxID_BUTTONRECEIVE</property>\r
<property name="kind">wxITEM_NORMAL</property>\r
- <property name="label">&Address Book</property>\r
+ <property name="label">Address Book</property>\r
<property name="name">m_tool2</property>\r
<property name="statusbar"></property>\r
<property name="tooltip"></property>\r
<property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property>\r
<property name="proportion">0</property>\r
<object class="wxTextCtrl" expanded="1">\r
- <property name="bg">wxSYS_COLOUR_MENU</property>\r
+ <property name="bg"></property>\r
<property name="context_help"></property>\r
<property name="enabled">1</property>\r
<property name="fg"></property>\r
<property name="maxlength">0</property>\r
<property name="minimum_size">-1,-1</property>\r
<property name="name">m_textCtrlAddress</property>\r
- <property name="permission">protected</property>\r
+ <property name="permission">public</property>\r
<property name="pos"></property>\r
<property name="size">340,-1</property>\r
<property name="style">wxTE_READONLY</property>\r
</object>\r
<object class="sizeritem" expanded="1">\r
<property name="border">5</property>\r
- <property name="flag">wxRIGHT</property>\r
+ <property name="flag">wxRIGHT|wxALIGN_CENTER_VERTICAL</property>\r
<property name="proportion">0</property>\r
<object class="wxButton" expanded="1">\r
<property name="bg"></property>\r
<property name="enabled">1</property>\r
<property name="fg"></property>\r
<property name="font"></property>\r
- <property name="hidden">1</property>\r
- <property name="id">wxID_BUTTONCHANGE</property>\r
- <property name="label">&New...</property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_BUTTONNEW</property>\r
+ <property name="label"> &New... </property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
<property name="name">m_buttonNew</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
- <property name="size"></property>\r
- <property name="style"></property>\r
+ <property name="size">-1,-1</property>\r
+ <property name="style">wxBU_EXACTFIT</property>\r
<property name="subclass"></property>\r
<property name="tooltip"></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <event name="OnButtonClick">OnButtonChange</event>\r
+ <event name="OnButtonClick">OnButtonNew</event>\r
<event name="OnChar"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<property name="border">5</property>\r
<property name="flag">wxEXPAND</property>\r
<property name="proportion">0</property>\r
- <object class="wxBoxSizer" expanded="0">\r
+ <object class="wxBoxSizer" expanded="1">\r
<property name="minimum_size"></property>\r
<property name="name">bSizer69</property>\r
<property name="orient">wxHORIZONTAL</property>\r
<event name="OnUpdateUI"></event>\r
<object class="wxBoxSizer" expanded="1">\r
<property name="minimum_size"></property>\r
- <property name="name">bSizer68</property>\r
+ <property name="name">bSizer58</property>\r
<property name="orient">wxVERTICAL</property>\r
<property name="permission">none</property>\r
<object class="sizeritem" expanded="1">\r
<property name="border">5</property>\r
- <property name="flag">wxEXPAND</property>\r
- <property name="proportion">0</property>\r
- <object class="spacer" expanded="1">\r
- <property name="height">5</property>\r
- <property name="permission">protected</property>\r
- <property name="width">0</property>\r
- </object>\r
- </object>\r
- <object class="sizeritem" expanded="1">\r
- <property name="border">5</property>\r
- <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
- <property name="proportion">0</property>\r
- <object class="wxStaticText" expanded="1">\r
- <property name="bg"></property>\r
- <property name="context_help"></property>\r
- <property name="enabled">1</property>\r
- <property name="fg"></property>\r
- <property name="font"></property>\r
- <property name="hidden">1</property>\r
- <property name="id">wxID_ANY</property>\r
- <property name="label">Bitcoin Address</property>\r
- <property name="maximum_size"></property>\r
- <property name="minimum_size"></property>\r
- <property name="name">m_staticText55</property>\r
- <property name="permission">protected</property>\r
- <property name="pos"></property>\r
- <property name="size"></property>\r
- <property name="style"></property>\r
- <property name="subclass"></property>\r
- <property name="tooltip"></property>\r
- <property name="window_extra_style"></property>\r
- <property name="window_name"></property>\r
- <property name="window_style"></property>\r
- <property name="wrap">-1</property>\r
- <event name="OnChar"></event>\r
- <event name="OnEnterWindow"></event>\r
- <event name="OnEraseBackground"></event>\r
- <event name="OnKeyDown"></event>\r
- <event name="OnKeyUp"></event>\r
- <event name="OnKillFocus"></event>\r
- <event name="OnLeaveWindow"></event>\r
- <event name="OnLeftDClick"></event>\r
- <event name="OnLeftDown"></event>\r
- <event name="OnLeftUp"></event>\r
- <event name="OnMiddleDClick"></event>\r
- <event name="OnMiddleDown"></event>\r
- <event name="OnMiddleUp"></event>\r
- <event name="OnMotion"></event>\r
- <event name="OnMouseEvents"></event>\r
- <event name="OnMouseWheel"></event>\r
- <event name="OnPaint"></event>\r
- <event name="OnRightDClick"></event>\r
- <event name="OnRightDown"></event>\r
- <event name="OnRightUp"></event>\r
- <event name="OnSetFocus"></event>\r
- <event name="OnSize"></event>\r
- <event name="OnUpdateUI"></event>\r
- </object>\r
- </object>\r
- <object class="sizeritem" expanded="1">\r
- <property name="border">5</property>\r
- <property name="flag">wxALL|wxEXPAND</property>\r
+ <property name="flag">wxEXPAND|wxTOP|wxRIGHT|wxLEFT</property>\r
<property name="proportion">1</property>\r
- <object class="wxListCtrl" expanded="1">\r
+ <object class="wxNotebook" expanded="1">\r
<property name="bg"></property>\r
+ <property name="bitmapsize"></property>\r
<property name="context_help"></property>\r
<property name="enabled">1</property>\r
<property name="fg"></property>\r
<property name="font"></property>\r
<property name="hidden">0</property>\r
- <property name="id">wxID_LISTCTRL</property>\r
+ <property name="id">wxID_ANY</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size"></property>\r
- <property name="name">m_listCtrl</property>\r
+ <property name="name">m_notebook</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
- <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING</property>\r
+ <property name="style"></property>\r
<property name="subclass"></property>\r
<property name="tooltip"></property>\r
<property name="window_extra_style"></property>\r
<event name="OnLeftDClick"></event>\r
<event name="OnLeftDown"></event>\r
<event name="OnLeftUp"></event>\r
- <event name="OnListBeginDrag"></event>\r
- <event name="OnListBeginLabelEdit"></event>\r
- <event name="OnListBeginRDrag"></event>\r
- <event name="OnListCacheHint"></event>\r
- <event name="OnListColBeginDrag"></event>\r
- <event name="OnListColClick"></event>\r
- <event name="OnListColDragging"></event>\r
- <event name="OnListColEndDrag"></event>\r
- <event name="OnListColRightClick"></event>\r
- <event name="OnListDeleteAllItems"></event>\r
- <event name="OnListDeleteItem"></event>\r
- <event name="OnListEndLabelEdit">OnListEndLabelEdit</event>\r
- <event name="OnListInsertItem"></event>\r
- <event name="OnListItemActivated">OnListItemActivated</event>\r
- <event name="OnListItemDeselected"></event>\r
- <event name="OnListItemFocused"></event>\r
- <event name="OnListItemMiddleClick"></event>\r
- <event name="OnListItemRightClick"></event>\r
- <event name="OnListItemSelected">OnListItemSelected</event>\r
- <event name="OnListKeyDown"></event>\r
<event name="OnMiddleDClick"></event>\r
<event name="OnMiddleDown"></event>\r
<event name="OnMiddleUp"></event>\r
<event name="OnMotion"></event>\r
<event name="OnMouseEvents"></event>\r
<event name="OnMouseWheel"></event>\r
+ <event name="OnNotebookPageChanged">OnNotebookPageChanged</event>\r
+ <event name="OnNotebookPageChanging"></event>\r
<event name="OnPaint"></event>\r
<event name="OnRightDClick"></event>\r
<event name="OnRightDown"></event>\r
<event name="OnSetFocus"></event>\r
<event name="OnSize"></event>\r
<event name="OnUpdateUI"></event>\r
+ <object class="notebookpage" expanded="1">\r
+ <property name="bitmap"></property>\r
+ <property name="label">Sending</property>\r
+ <property name="select">0</property>\r
+ <object class="wxPanel" expanded="1">\r
+ <property name="bg"></property>\r
+ <property name="context_help"></property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="font"></property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_PANELSENDING</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="minimum_size"></property>\r
+ <property name="name">m_panelSending</property>\r
+ <property name="permission">protected</property>\r
+ <property name="pos"></property>\r
+ <property name="size"></property>\r
+ <property name="subclass"></property>\r
+ <property name="tooltip"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style">wxTAB_TRAVERSAL</property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ <object class="wxBoxSizer" expanded="1">\r
+ <property name="minimum_size"></property>\r
+ <property name="name">bSizer68</property>\r
+ <property name="orient">wxVERTICAL</property>\r
+ <property name="permission">none</property>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxEXPAND</property>\r
+ <property name="proportion">0</property>\r
+ <object class="spacer" expanded="1">\r
+ <property name="height">0</property>\r
+ <property name="permission">protected</property>\r
+ <property name="width">0</property>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxStaticText" expanded="1">\r
+ <property name="bg"></property>\r
+ <property name="context_help"></property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="font"></property>\r
+ <property name="hidden">1</property>\r
+ <property name="id">wxID_ANY</property>\r
+ <property name="label">Bitcoin Address</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="minimum_size"></property>\r
+ <property name="name">m_staticText55</property>\r
+ <property name="permission">protected</property>\r
+ <property name="pos"></property>\r
+ <property name="size"></property>\r
+ <property name="style"></property>\r
+ <property name="subclass"></property>\r
+ <property name="tooltip"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <property name="wrap">-1</property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxALL|wxEXPAND</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxListCtrl" expanded="1">\r
+ <property name="bg"></property>\r
+ <property name="context_help"></property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="font"></property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_LISTCTRLSENDING</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="minimum_size"></property>\r
+ <property name="name">m_listCtrlSending</property>\r
+ <property name="permission">protected</property>\r
+ <property name="pos"></property>\r
+ <property name="size"></property>\r
+ <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING</property>\r
+ <property name="subclass"></property>\r
+ <property name="tooltip"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnListBeginDrag"></event>\r
+ <event name="OnListBeginLabelEdit"></event>\r
+ <event name="OnListBeginRDrag"></event>\r
+ <event name="OnListCacheHint"></event>\r
+ <event name="OnListColBeginDrag"></event>\r
+ <event name="OnListColClick"></event>\r
+ <event name="OnListColDragging"></event>\r
+ <event name="OnListColEndDrag"></event>\r
+ <event name="OnListColRightClick"></event>\r
+ <event name="OnListDeleteAllItems"></event>\r
+ <event name="OnListDeleteItem"></event>\r
+ <event name="OnListEndLabelEdit">OnListEndLabelEdit</event>\r
+ <event name="OnListInsertItem"></event>\r
+ <event name="OnListItemActivated">OnListItemActivated</event>\r
+ <event name="OnListItemDeselected"></event>\r
+ <event name="OnListItemFocused"></event>\r
+ <event name="OnListItemMiddleClick"></event>\r
+ <event name="OnListItemRightClick"></event>\r
+ <event name="OnListItemSelected">OnListItemSelected</event>\r
+ <event name="OnListKeyDown"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ <object class="notebookpage" expanded="1">\r
+ <property name="bitmap"></property>\r
+ <property name="label">Receiving</property>\r
+ <property name="select">1</property>\r
+ <object class="wxPanel" expanded="1">\r
+ <property name="bg"></property>\r
+ <property name="context_help"></property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="font"></property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_PANELRECEIVING</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="minimum_size"></property>\r
+ <property name="name">m_panelReceiving</property>\r
+ <property name="permission">protected</property>\r
+ <property name="pos"></property>\r
+ <property name="size"></property>\r
+ <property name="subclass"></property>\r
+ <property name="tooltip"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style">wxTAB_TRAVERSAL</property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ <object class="wxBoxSizer" expanded="1">\r
+ <property name="minimum_size"></property>\r
+ <property name="name">bSizer681</property>\r
+ <property name="orient">wxVERTICAL</property>\r
+ <property name="permission">none</property>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxEXPAND</property>\r
+ <property name="proportion">0</property>\r
+ <object class="spacer" expanded="1">\r
+ <property name="height">0</property>\r
+ <property name="permission">protected</property>\r
+ <property name="width">0</property>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">6</property>\r
+ <property name="flag">wxTOP|wxRIGHT|wxLEFT</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxStaticText" expanded="1">\r
+ <property name="bg"></property>\r
+ <property name="context_help"></property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="font"></property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_ANY</property>\r
+ <property name="label">These are your Bitcoin addresses for receiving payments. You can give a different one to each sender to keep track of who is paying you. The highlighted address will be displayed in the main window.</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="minimum_size"></property>\r
+ <property name="name">m_staticText45</property>\r
+ <property name="permission">protected</property>\r
+ <property name="pos"></property>\r
+ <property name="size"></property>\r
+ <property name="style"></property>\r
+ <property name="subclass"></property>\r
+ <property name="tooltip"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <property name="wrap">570</property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxEXPAND</property>\r
+ <property name="proportion">0</property>\r
+ <object class="spacer" expanded="1">\r
+ <property name="height">2</property>\r
+ <property name="permission">protected</property>\r
+ <property name="width">0</property>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxALL|wxEXPAND</property>\r
+ <property name="proportion">1</property>\r
+ <object class="wxListCtrl" expanded="1">\r
+ <property name="bg"></property>\r
+ <property name="context_help"></property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="font"></property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_LISTCTRLRECEIVING</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="minimum_size"></property>\r
+ <property name="name">m_listCtrlReceiving</property>\r
+ <property name="permission">protected</property>\r
+ <property name="pos"></property>\r
+ <property name="size"></property>\r
+ <property name="style">wxLC_NO_SORT_HEADER|wxLC_REPORT|wxLC_SORT_ASCENDING</property>\r
+ <property name="subclass"></property>\r
+ <property name="tooltip"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnListBeginDrag"></event>\r
+ <event name="OnListBeginLabelEdit"></event>\r
+ <event name="OnListBeginRDrag"></event>\r
+ <event name="OnListCacheHint"></event>\r
+ <event name="OnListColBeginDrag"></event>\r
+ <event name="OnListColClick"></event>\r
+ <event name="OnListColDragging"></event>\r
+ <event name="OnListColEndDrag"></event>\r
+ <event name="OnListColRightClick"></event>\r
+ <event name="OnListDeleteAllItems"></event>\r
+ <event name="OnListDeleteItem"></event>\r
+ <event name="OnListEndLabelEdit">OnListEndLabelEdit</event>\r
+ <event name="OnListInsertItem"></event>\r
+ <event name="OnListItemActivated">OnListItemActivated</event>\r
+ <event name="OnListItemDeselected"></event>\r
+ <event name="OnListItemFocused"></event>\r
+ <event name="OnListItemMiddleClick"></event>\r
+ <event name="OnListItemRightClick"></event>\r
+ <event name="OnListItemSelected">OnListItemSelected</event>\r
+ <event name="OnListKeyDown"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
+ </object>\r
</object>\r
</object>\r
<object class="sizeritem" expanded="1">\r
<property name="fg"></property>\r
<property name="font"></property>\r
<property name="hidden">0</property>\r
- <property name="id">wxID_BUTTONEDIT</property>\r
- <property name="label">&Edit...</property>\r
+ <property name="id">wxID_BUTTONDELETE</property>\r
+ <property name="label">&Delete</property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,-1</property>\r
- <property name="name">m_buttonEdit</property>\r
+ <property name="name">m_buttonDelete</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <event name="OnButtonClick">OnButtonEdit</event>\r
+ <event name="OnButtonClick">OnButtonDelete</event>\r
<event name="OnChar"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<property name="fg"></property>\r
<property name="font"></property>\r
<property name="hidden">0</property>\r
- <property name="id">wxID_BUTTONNEW</property>\r
- <property name="label"> &New Address... </property>\r
+ <property name="id">wxID_BUTTONCOPY</property>\r
+ <property name="label"> &Copy to Clipboard </property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,-1</property>\r
- <property name="name">m_buttonNew</property>\r
+ <property name="name">m_buttonCopy</property>\r
+ <property name="permission">protected</property>\r
+ <property name="pos"></property>\r
+ <property name="size">-1,-1</property>\r
+ <property name="style"></property>\r
+ <property name="subclass"></property>\r
+ <property name="tooltip"></property>\r
+ <property name="window_extra_style"></property>\r
+ <property name="window_name"></property>\r
+ <property name="window_style"></property>\r
+ <event name="OnButtonClick">OnButtonCopy</event>\r
+ <event name="OnChar"></event>\r
+ <event name="OnEnterWindow"></event>\r
+ <event name="OnEraseBackground"></event>\r
+ <event name="OnKeyDown"></event>\r
+ <event name="OnKeyUp"></event>\r
+ <event name="OnKillFocus"></event>\r
+ <event name="OnLeaveWindow"></event>\r
+ <event name="OnLeftDClick"></event>\r
+ <event name="OnLeftDown"></event>\r
+ <event name="OnLeftUp"></event>\r
+ <event name="OnMiddleDClick"></event>\r
+ <event name="OnMiddleDown"></event>\r
+ <event name="OnMiddleUp"></event>\r
+ <event name="OnMotion"></event>\r
+ <event name="OnMouseEvents"></event>\r
+ <event name="OnMouseWheel"></event>\r
+ <event name="OnPaint"></event>\r
+ <event name="OnRightDClick"></event>\r
+ <event name="OnRightDown"></event>\r
+ <event name="OnRightUp"></event>\r
+ <event name="OnSetFocus"></event>\r
+ <event name="OnSize"></event>\r
+ <event name="OnUpdateUI"></event>\r
+ </object>\r
+ </object>\r
+ <object class="sizeritem" expanded="1">\r
+ <property name="border">5</property>\r
+ <property name="flag">wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND</property>\r
+ <property name="proportion">0</property>\r
+ <object class="wxButton" expanded="1">\r
+ <property name="bg"></property>\r
+ <property name="context_help"></property>\r
+ <property name="default">0</property>\r
+ <property name="enabled">1</property>\r
+ <property name="fg"></property>\r
+ <property name="font"></property>\r
+ <property name="hidden">0</property>\r
+ <property name="id">wxID_BUTTONEDIT</property>\r
+ <property name="label">&Edit...</property>\r
+ <property name="maximum_size"></property>\r
+ <property name="minimum_size">-1,-1</property>\r
+ <property name="name">m_buttonEdit</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <event name="OnButtonClick">OnButtonNew</event>\r
+ <event name="OnButtonClick">OnButtonEdit</event>\r
<event name="OnChar"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<property name="fg"></property>\r
<property name="font"></property>\r
<property name="hidden">0</property>\r
- <property name="id">wxID_BUTTONDELETE</property>\r
- <property name="label">&Delete</property>\r
+ <property name="id">wxID_BUTTONNEW</property>\r
+ <property name="label"> &New Address... </property>\r
<property name="maximum_size"></property>\r
<property name="minimum_size">-1,-1</property>\r
- <property name="name">m_buttonDelete</property>\r
+ <property name="name">m_buttonNew</property>\r
<property name="permission">protected</property>\r
<property name="pos"></property>\r
<property name="size"></property>\r
<property name="window_extra_style"></property>\r
<property name="window_name"></property>\r
<property name="window_style"></property>\r
- <event name="OnButtonClick">OnButtonDelete</event>\r
+ <event name="OnButtonClick">OnButtonNew</event>\r
<event name="OnChar"></event>\r
<event name="OnEnterWindow"></event>\r
<event name="OnEraseBackground"></event>\r
<property name="minimum_size"></property>\r
<property name="name">CGetTextFromUserDialogBase</property>\r
<property name="pos"></property>\r
- <property name="size">403,138</property>\r
+ <property name="size">440,138</property>\r
<property name="style">wxDEFAULT_DIALOG_STYLE</property>\r
<property name="subclass"></property>\r
<property name="title"></property>\r
\r
// wxWidgets translation\r
const char* pszTranslated = wxGetTranslation(wxString(pszEnglish, wxConvUTF8)).utf8_str();\r
+\r
+ // We don't cache unknown strings because caller might be passing in a\r
+ // dynamic string and we would keep allocating memory for each variation.\r
if (strcmp(pszEnglish, pszTranslated) == 0)\r
return pszEnglish;\r
\r
- // Add to cache, memory doesn't need to be freed\r
+ // Add to cache, memory doesn't need to be freed. We only cache because\r
+ // we must pass back a pointer to permanently allocated memory.\r
char* pszCached = new char[strlen(pszTranslated)+1];\r
strcpy(pszCached, pszTranslated);\r
mapCache[pszEnglish] = pszCached;\r