if (!event.Iconized())
fClosedToTray = false;
#if defined(__WXGTK__) || defined(__WXMAC_OSX__)
- if (mapArgs.count("-minimizetotray")) {
+ if (GetBoolArg("-minimizetotray")) {
#endif
// The tray icon sometimes disappears on ubuntu karmic
// Hiding the taskbar button doesn't work cleanly on ubuntu lucid
strDescription += " - ";
strDescription += mapValue["message"];
}
+ else if (!mapValue["comment"].empty())
+ {
+ if (!strDescription.empty())
+ strDescription += " - ";
+ strDescription += mapValue["comment"];
+ }
int64 nValue = txout.nValue;
if (nTxFee > 0)
Close(true);
}
-void CMainFrame::OnMenuOptionsGenerate(wxCommandEvent& event)
-{
- // Options->Generate Coins
- GenerateBitcoins(event.IsChecked());
-}
-
void CMainFrame::OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event)
{
event.Check(fGenerateBitcoins);
//
if (!wtx.mapValue["message"].empty())
strHTML += string() + "<br><b>" + _("Message:") + "</b><br>" + HtmlEscape(wtx.mapValue["message"], true) + "<br>";
+ if (!wtx.mapValue["comment"].empty())
+ strHTML += string() + "<br><b>" + _("Comment:") + "</b><br>" + HtmlEscape(wtx.mapValue["comment"], true) + "<br>";
if (wtx.IsCoinBase())
strHTML += string() + "<br>" + _("Generated coins must wait 120 blocks before they can be spent. When you generated this block, it was broadcast to the network to be added to the block chain. If it fails to get into the chain, it will change to \"not accepted\" and not be spendable. This may occasionally happen if another node generates a block within a few seconds of yours.") + "<br>";
void CTxDetailsDialog::OnButtonOK(wxCommandEvent& event)
{
- Close();
- //Destroy();
+ EndModal(false);
}
#endif
#if defined(__WXGTK__) || defined(__WXMAC_OSX__)
m_checkBoxStartOnSystemStartup->SetLabel(_("&Start Bitcoin on window system startup"));
- if (!mapArgs.count("-minimizetotray"))
+ if (!GetBoolArg("-minimizetotray"))
{
// Minimize to tray is just too buggy on Linux
fMinimizeToTray = false;
// Init values
m_textCtrlTransactionFee->SetValue(FormatMoney(nTransactionFee));
- m_checkBoxLimitProcessors->SetValue(fLimitProcessors);
- m_spinCtrlLimitProcessors->Enable(fLimitProcessors);
- m_spinCtrlLimitProcessors->SetValue(nLimitProcessors);
- int nProcessors = wxThread::GetCPUCount();
- if (nProcessors < 1)
- nProcessors = 999;
- m_spinCtrlLimitProcessors->SetRange(1, nProcessors);
m_checkBoxStartOnSystemStartup->SetValue(fTmpStartOnSystemStartup = GetStartOnSystemStartup());
m_checkBoxMinimizeToTray->SetValue(fMinimizeToTray);
m_checkBoxMinimizeOnClose->SetValue(fMinimizeOnClose);
+ if (fHaveUPnP)
+ m_checkBoxUseUPnP->SetValue(fUseUPnP);
+ else
+ m_checkBoxUseUPnP->Enable(false);
m_checkBoxUseProxy->SetValue(fUseProxy);
m_textCtrlProxyIP->Enable(fUseProxy);
m_textCtrlProxyPort->Enable(fUseProxy);
m_textCtrlTransactionFee->SetValue(FormatMoney(nTmp));
}
-void COptionsDialog::OnCheckBoxLimitProcessors(wxCommandEvent& event)
-{
- m_spinCtrlLimitProcessors->Enable(event.IsChecked());
-}
-
void COptionsDialog::OnCheckBoxUseProxy(wxCommandEvent& event)
{
m_textCtrlProxyIP->Enable(event.IsChecked());
void COptionsDialog::OnButtonOK(wxCommandEvent& event)
{
OnButtonApply(event);
- Close();
+ EndModal(false);
}
void COptionsDialog::OnButtonCancel(wxCommandEvent& event)
{
- Close();
+ EndModal(false);
}
void COptionsDialog::OnButtonApply(wxCommandEvent& event)
if (ParseMoney(m_textCtrlTransactionFee->GetValue(), nTransactionFee) && nTransactionFee != nPrevTransactionFee)
walletdb.WriteSetting("nTransactionFee", nTransactionFee);
- int nPrevMaxProc = (fLimitProcessors ? nLimitProcessors : INT_MAX);
- if (fLimitProcessors != m_checkBoxLimitProcessors->GetValue())
- {
- fLimitProcessors = m_checkBoxLimitProcessors->GetValue();
- walletdb.WriteSetting("fLimitProcessors", fLimitProcessors);
- }
- if (nLimitProcessors != m_spinCtrlLimitProcessors->GetValue())
- {
- nLimitProcessors = m_spinCtrlLimitProcessors->GetValue();
- walletdb.WriteSetting("nLimitProcessors", nLimitProcessors);
- }
- if (fGenerateBitcoins && (fLimitProcessors ? nLimitProcessors : INT_MAX) > nPrevMaxProc)
- GenerateBitcoins(fGenerateBitcoins);
-
if (fTmpStartOnSystemStartup != m_checkBoxStartOnSystemStartup->GetValue())
{
fTmpStartOnSystemStartup = m_checkBoxStartOnSystemStartup->GetValue();
walletdb.WriteSetting("fMinimizeOnClose", fMinimizeOnClose);
}
+ if (fHaveUPnP && fUseUPnP != m_checkBoxUseUPnP->GetValue())
+ {
+ fUseUPnP = m_checkBoxUseUPnP->GetValue();
+ walletdb.WriteSetting("fUseUPnP", fUseUPnP);
+ MapPort(fUseUPnP);
+ }
+
fUseProxy = m_checkBoxUseProxy->GetValue();
walletdb.WriteSetting("fUseProxy", fUseProxy);
CAboutDialog::CAboutDialog(wxWindow* parent) : CAboutDialogBase(parent)
{
- m_staticTextVersion->SetLabel(strprintf(_("version %s%s beta"), FormatVersion(VERSION).c_str(), pszSubVer));
+ m_staticTextVersion->SetLabel(strprintf(_("version %s"), FormatFullVersion().c_str()));
// Change (c) into UTF-8 or ANSI copyright symbol
wxString str = m_staticTextMain->GetLabel();
void CAboutDialog::OnButtonOK(wxCommandEvent& event)
{
- Close();
+ EndModal(false);
}
m_bitmapCheckMark->Show(false);
fEnabledPrev = true;
m_textCtrlAddress->SetFocus();
+
//// todo: should add a display of your balance for convenience
#ifndef __WXMSW__
wxFont fontTmp = m_staticTextInstructions->GetFont();
if (fontTmp.GetPointSize() > 9);
fontTmp.SetPointSize(9);
m_staticTextInstructions->SetFont(fontTmp);
- SetSize(725, 380);
+ SetSize(725, 180);
#endif
-
+
// Set Icon
wxIcon iconSend;
iconSend.CopyFromBitmap(wxBitmap(send16noshadow_xpm));
SetIcon(iconSend);
- wxCommandEvent event;
- OnTextAddress(event);
-
// Fixup the tab order
m_buttonPaste->MoveAfterInTabOrder(m_buttonCancel);
m_buttonAddress->MoveAfterInTabOrder(m_buttonPaste);
this->Layout();
}
-void CSendDialog::OnTextAddress(wxCommandEvent& event)
-{
- // Check mark
- event.Skip();
- bool fBitcoinAddress = IsValidBitcoinAddress(m_textCtrlAddress->GetValue());
- m_bitmapCheckMark->Show(fBitcoinAddress);
-
- // Grey out message if bitcoin address
- bool fEnable = !fBitcoinAddress;
- m_staticTextFrom->Enable(fEnable);
- m_textCtrlFrom->Enable(fEnable);
- m_staticTextMessage->Enable(fEnable);
- m_textCtrlMessage->Enable(fEnable);
- m_textCtrlMessage->SetBackgroundColour(wxSystemSettings::GetColour(fEnable ? wxSYS_COLOUR_WINDOW : wxSYS_COLOUR_BTNFACE));
- if (!fEnable && fEnabledPrev)
- {
- strFromSave = m_textCtrlFrom->GetValue();
- strMessageSave = m_textCtrlMessage->GetValue();
- m_textCtrlFrom->SetValue(_("n/a"));
- m_textCtrlMessage->SetValue(_("Can't include a message when sending to a Bitcoin address"));
- }
- else if (fEnable && !fEnabledPrev)
- {
- m_textCtrlFrom->SetValue(strFromSave);
- m_textCtrlMessage->SetValue(strMessageSave);
- }
- fEnabledPrev = fEnable;
-}
-
void CSendDialog::OnKillFocusAmount(wxFocusEvent& event)
{
// Reformat the amount
if (fBitcoinAddress)
{
- // Send to bitcoin address
- CScript scriptPubKey;
- scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG;
-
- string strError = SendMoney(scriptPubKey, nValue, wtx, true);
- if (strError == "")
- wxMessageBox(_("Payment sent "), _("Sending..."));
- else if (strError == "ABORTED")
- return; // leave send dialog open
- else
- {
- wxMessageBox(strError + " ", _("Sending..."));
- EndModal(false);
- }
+ CRITICAL_BLOCK(cs_main)
+ {
+ // Send to bitcoin address
+ CScript scriptPubKey;
+ scriptPubKey << OP_DUP << OP_HASH160 << hash160 << OP_EQUALVERIFY << OP_CHECKSIG;
+
+ string strError = SendMoney(scriptPubKey, nValue, wtx, true);
+ if (strError == "")
+ wxMessageBox(_("Payment sent "), _("Sending..."));
+ else if (strError == "ABORTED")
+ return; // leave send dialog open
+ else
+ {
+ wxMessageBox(strError + " ", _("Sending..."));
+ EndModal(false);
+ return;
+ }
+ }
}
else
{
// Message
wtx.mapValue["to"] = strAddress;
- wtx.mapValue["from"] = m_textCtrlFrom->GetValue();
- wtx.mapValue["message"] = m_textCtrlMessage->GetValue();
// Send to IP address
CSendingDialog* pdialog = new CSendingDialog(this, addr, nValue, wtx);
if (!CreateTransaction(scriptPubKey, nPrice, wtx, reservekey, nFeeRequired))
{
if (nPrice + nFeeRequired > GetBalance())
- Error(strprintf(_("This is an oversized transaction that requires a transaction fee of %s"), FormatMoney(nFeeRequired).c_str()));
+ Error(strprintf(_("This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds"), FormatMoney(nFeeRequired).c_str()));
else
Error(_("Transaction creation failed"));
return;
enum
{
ID_TASKBAR_RESTORE = 10001,
+ ID_TASKBAR_SEND,
ID_TASKBAR_OPTIONS,
ID_TASKBAR_GENERATE,
ID_TASKBAR_EXIT,
BEGIN_EVENT_TABLE(CMyTaskBarIcon, wxTaskBarIcon)
EVT_TASKBAR_LEFT_DCLICK(CMyTaskBarIcon::OnLeftButtonDClick)
EVT_MENU(ID_TASKBAR_RESTORE, CMyTaskBarIcon::OnMenuRestore)
+ EVT_MENU(ID_TASKBAR_SEND, CMyTaskBarIcon::OnMenuSend)
EVT_MENU(ID_TASKBAR_OPTIONS, CMyTaskBarIcon::OnMenuOptions)
- EVT_MENU(ID_TASKBAR_GENERATE, CMyTaskBarIcon::OnMenuGenerate)
EVT_UPDATE_UI(ID_TASKBAR_GENERATE, CMyTaskBarIcon::OnUpdateUIGenerate)
EVT_MENU(ID_TASKBAR_EXIT, CMyTaskBarIcon::OnMenuExit)
END_EVENT_TABLE()
Restore();
}
+void CMyTaskBarIcon::OnMenuSend(wxCommandEvent& event)
+{
+ // Taskbar: Send
+ CSendDialog dialog(pframeMain);
+ dialog.ShowModal();
+}
+
void CMyTaskBarIcon::OnMenuOptions(wxCommandEvent& event)
{
// Since it's modal, get the main window to do it
pframeMain->Raise();
}
-void CMyTaskBarIcon::OnMenuGenerate(wxCommandEvent& event)
-{
- GenerateBitcoins(event.IsChecked());
-}
-
void CMyTaskBarIcon::OnUpdateUIGenerate(wxUpdateUIEvent& event)
{
event.Check(fGenerateBitcoins);
{
wxMenu* pmenu = new wxMenu;
pmenu->Append(ID_TASKBAR_RESTORE, _("&Open Bitcoin"));
+ pmenu->Append(ID_TASKBAR_SEND, _("&Send Bitcoins"));
pmenu->Append(ID_TASKBAR_OPTIONS, _("O&ptions..."));
- pmenu->AppendCheckItem(ID_TASKBAR_GENERATE, _("&Generate Coins"))->Check(fGenerateBitcoins);
#ifndef __WXMAC_OSX__ // Mac has built-in quit menu
pmenu->AppendSeparator();
pmenu->Append(ID_TASKBAR_EXIT, _("E&xit"));
void CreateMainWindow()
{
pframeMain = new CMainFrame(NULL);
- if (mapArgs.count("-min"))
+ if (GetBoolArg("-min"))
pframeMain->Iconize(true);
#if defined(__WXGTK__) || defined(__WXMAC_OSX__)
- if (!mapArgs.count("-minimizetotray"))
+ if (!GetBoolArg("-minimizetotray"))
fMinimizeToTray = false;
#endif
pframeMain->Show(true); // have to show first to get taskbar button to hide
}
if (pid > 0)
pthread_exit((void*)0);
+
+ pid_t sid = setsid();
+ if (sid < 0)
+ fprintf(stderr, "Error: setsid() returned %d errno %d\n", sid, errno);
}
return true;
extern int g_isPainting;
g_isPainting = 10000;
#endif
-#ifdef GUI
- wxImage::AddHandler(new wxPNGHandler);
-#endif
#if defined(__WXMSW__ ) || defined(__WXMAC_OSX__)
SetAppName("Bitcoin");
#else