To Build
--------
+ cd src/
+
make -f makefile.unix # Bitcoin with wxWidgets GUI
or
make -f makefile.unix bitcoind # Headless bitcoin
and build it yourself. See the build instructions and configure parameters
below.
-Requires miniupnpc for UPnP port mapping. To compile with UPnP support,
-install miniupnpc and compile after setting USE_UPNP. It can be downloaded
-from http://miniupnp.tuxfamily.org/files/.
+Requires miniupnpc for UPnP port mapping. It can be downloaded from
+http://miniupnp.tuxfamily.org/files/. UPnP support is compiled in and
+turned off by default. Set USE_UPNP to a different value to control this:
+USE_UPNP= no UPnP support, miniupnp not required;
+USE_UPNP=0 (the default) UPnP support turned off by default at runtime;
+USE_UPNP=1 UPnP support turned on by default at runtime.
Licenses of statically linked libraries:
wxWidgets LGPL 2.1 with very liberal exceptions
cd wxWidgets-2.9.0
mkdir buildgtk
cd buildgtk
-../configure --with-gtk --enable-debug --disable-shared --enable-monolithic
+../configure --with-gtk --enable-debug --disable-shared --enable-monolithic --without-libpng --disable-svg
make
sudo su
make install
\r
# General Symbol Definitions\r
!define REGKEY "SOFTWARE\$(^Name)"\r
-!define VERSION 0.3.21\r
+!define VERSION 0.3.22\r
!define COMPANY "Bitcoin project"\r
!define URL http://www.bitcoin.org/\r
\r
!insertmacro MUI_LANGUAGE English\r
\r
# Installer attributes\r
-OutFile bitcoin-0.3.21-win32-setup.exe\r
+OutFile bitcoin-0.3.22-win32-setup.exe\r
InstallDir $PROGRAMFILES\Bitcoin\r
CRCCheck on\r
XPStyle on\r
ShowInstDetails show\r
-VIProductVersion 0.3.21.0\r
+VIProductVersion 0.3.22.0\r
VIAddVersionKey ProductName Bitcoin\r
VIAddVersionKey ProductVersion "${VERSION}"\r
VIAddVersionKey CompanyName "${COMPANY}"\r
<property name="checked">0</property>\r
<property name="enabled">1</property>\r
<property name="help"></property>\r
- <property name="id">wxID_OPTIONSGENERATEBITCOINS</property>\r
- <property name="kind">wxITEM_CHECK</property>\r
- <property name="label">&Generate Coins</property>\r
- <property name="name">m_menuOptionsGenerateBitcoins</property>\r
- <property name="permission">none</property>\r
- <property name="shortcut"></property>\r
- <property name="unchecked_bitmap"></property>\r
- <event name="OnMenuSelection">OnMenuOptionsGenerate</event>\r
- <event name="OnUpdateUI">OnUpdateUIOptionsGenerate</event>\r
- </object>\r
- <object class="wxMenuItem" expanded="1">\r
- <property name="bitmap"></property>\r
- <property name="checked">0</property>\r
- <property name="enabled">1</property>\r
- <property name="help"></property>\r
<property name="id">wxID_ANY</property>\r
<property name="kind">wxITEM_NORMAL</property>\r
<property name="label">&Your Receiving Addresses...</property>\r
</object>\r
<object class="sizeritem" expanded="1">\r
<property name="border">5</property>\r
- <property name="flag"></property>\r
- <property name="proportion">0</property>\r
- <object class="wxBoxSizer" expanded="1">\r
- <property name="minimum_size"></property>\r
- <property name="name">bSizer71</property>\r
- <property name="orient">wxHORIZONTAL</property>\r
- <property name="permission">none</property>\r
- <object class="sizeritem" expanded="1">\r
- <property name="border">5</property>\r
- <property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>\r
- <property name="proportion">0</property>\r
- <object class="wxCheckBox" expanded="1">\r
- <property name="bg"></property>\r
- <property name="checked">0</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">&Limit coin generation to</property>\r
- <property name="maximum_size"></property>\r
- <property name="minimum_size"></property>\r
- <property name="name">m_checkBoxLimitProcessors</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="validator_data_type"></property>\r
- <property name="validator_style">wxFILTER_NONE</property>\r
- <property name="validator_type">wxDefaultValidator</property>\r
- <property name="validator_variable"></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="OnCheckBox">OnCheckBoxLimitProcessors</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">wxALIGN_CENTER_VERTICAL</property>\r
- <property name="proportion">0</property>\r
- <object class="wxSpinCtrl" 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="initial">1</property>\r
- <property name="max">999</property>\r
- <property name="maximum_size"></property>\r
- <property name="min">1</property>\r
- <property name="minimum_size"></property>\r
- <property name="name">m_spinCtrlLimitProcessors</property>\r
- <property name="permission">protected</property>\r
- <property name="pos"></property>\r
- <property name="size">48,-1</property>\r
- <property name="style">wxSP_ARROW_KEYS</property>\r
- <property name="subclass"></property>\r
- <property name="tooltip"></property>\r
- <property name="validator_data_type"></property>\r
- <property name="validator_style">wxFILTER_NONE</property>\r
- <property name="validator_type">wxDefaultValidator</property>\r
- <property name="validator_variable"></property>\r
- <property name="value"></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="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="OnSpinCtrl"></event>\r
- <event name="OnSpinCtrlText"></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">wxALIGN_CENTER_VERTICAL|wxALL</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">processors</property>\r
- <property name="maximum_size"></property>\r
- <property name="minimum_size"></property>\r
- <property name="name">m_staticText35</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="validator_data_type"></property>\r
- <property name="validator_style">wxFILTER_NONE</property>\r
- <property name="validator_type">wxDefaultValidator</property>\r
- <property name="validator_variable"></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>\r
- </object>\r
- <object class="sizeritem" expanded="1">\r
- <property name="border">5</property>\r
<property name="flag">wxALL</property>\r
<property name="proportion">0</property>\r
<object class="wxCheckBox" expanded="1">\r
string strKey;
ssKey >> strKey;
- // Menu state
- if (strKey == "fGenerateBitcoins") ssValue >> fGenerateBitcoins;
-
// Options
+#ifndef GUI
+ if (strKey == "fGenerateBitcoins") ssValue >> fGenerateBitcoins;
+#endif
if (strKey == "nTransactionFee") ssValue >> nTransactionFee;
if (strKey == "addrIncoming") ssValue >> addrIncoming;
if (strKey == "fLimitProcessors") ssValue >> fLimitProcessors;
// Make sure only a single bitcoin process is using the data directory.
string strLockFile = GetDataDir() + "/.lock";
FILE* file = fopen(strLockFile.c_str(), "a"); // empty lock file; created if it doesn't exist.
- fclose(file);
+ if (file) fclose(file);
static boost::interprocess::file_lock lock(strLockFile.c_str());
if (!lock.try_lock())
{
if (GetSigOpCount() > nSize / 34 || nSize < 100)
return error("AcceptToMemoryPool() : nonstandard transaction");
- // Rather not work on nonstandard transactions
- if (!IsStandard())
+ // Rather not work on nonstandard transactions (unless -testnet)
+ if (!fTestNet && !IsStandard())
return error("AcceptToMemoryPool() : nonstandard transaction type");
// Do we already have it?
printf("ThreadBitcoinMiner exiting, %d threads remaining\n", vnThreadsRunning[3]);
}
-#if defined(__GNUC__) && defined(CRYPTOPP_X86_ASM_AVAILABLE)
-void CallCPUID(int in, int& aret, int& cret)
-{
- int a, c;
- asm (
- "mov %2, %%eax; " // in into eax
- "cpuid;"
- "mov %%eax, %0;" // eax into a
- "mov %%ecx, %1;" // ecx into c
- :"=r"(a),"=r"(c) /* output */
- :"r"(in) /* input */
- :"%eax","%ebx","%ecx","%edx" /* clobbered register */
- );
- aret = a;
- cret = c;
-}
-
-bool Detect128BitSSE2()
-{
- int a, c, nBrand;
- CallCPUID(0, a, nBrand);
- bool fIntel = (nBrand == 0x6c65746e); // ntel
- bool fAMD = (nBrand == 0x444d4163); // cAMD
-
- struct
- {
- unsigned int nStepping : 4;
- unsigned int nModel : 4;
- unsigned int nFamily : 4;
- unsigned int nProcessorType : 2;
- unsigned int nUnused : 2;
- unsigned int nExtendedModel : 4;
- unsigned int nExtendedFamily : 8;
- }
- cpu;
- CallCPUID(1, a, c);
- memcpy(&cpu, &a, sizeof(cpu));
- int nFamily = cpu.nExtendedFamily + cpu.nFamily;
- int nModel = cpu.nExtendedModel*16 + cpu.nModel;
-
- // We need Intel Nehalem or AMD K10 or better for 128bit SSE2
- // Nehalem = i3/i5/i7 and some Xeon
- // K10 = Opterons with 4 or more cores, Phenom, Phenom II, Athlon II
- // Intel Core i5 family 6, model 26 or 30
- // Intel Core i7 family 6, model 26 or 30
- // Intel Core i3 family 6, model 37
- // AMD Phenom family 16, model 10
- bool fUseSSE2 = ((fIntel && nFamily * 10000 + nModel >= 60026) ||
- (fAMD && nFamily * 10000 + nModel >= 160010));
-
- // AMD reports a lower model number in 64-bit mode
- if (fAMD && sizeof(void*) > 4 && nFamily * 10000 + nModel >= 160000)
- fUseSSE2 = true;
-
- static bool fPrinted;
- if (!fPrinted)
- {
- fPrinted = true;
- printf("CPUID %08x family %d, model %d, stepping %d, fUseSSE2=%d\n", nBrand, nFamily, nModel, cpu.nStepping, fUseSSE2);
- }
- return fUseSSE2;
-}
-#else
-bool Detect128BitSSE2() { return false; }
-#endif
int FormatHashBlocks(void* pbuffer, unsigned int len)
{
}
}
-extern unsigned int ScanHash_4WaySSE2(char* pmidstate, char* pblock, char* phash1, char* phash, unsigned int& nHashesDone);
-
-
class COrphan
{
{
printf("BitcoinMiner started\n");
SetThreadPriority(THREAD_PRIORITY_LOWEST);
- bool f4WaySSE2 = Detect128BitSSE2();
- if (mapArgs.count("-4way"))
- f4WaySSE2 = GetBoolArg("-4way");
// Each thread has its own key and counter
CReserveKey reservekey;
unsigned int nHashesDone = 0;
unsigned int nNonceFound;
-#ifdef FOURWAYSSE2
- if (f4WaySSE2)
- // tcatm's 4-way 128-bit SSE2 SHA-256
- nNonceFound = ScanHash_4WaySSE2(pmidstate, pdata + 64, phash1, (char*)&hash, nHashesDone);
- else
-#endif
- // Crypto++ SHA-256
- nNonceFound = ScanHash_CryptoPP(pmidstate, pdata + 64, phash1, (char*)&hash, nHashesDone);
+ // Crypto++ SHA-256
+ nNonceFound = ScanHash_CryptoPP(pmidstate, pdata + 64, phash1,
+ (char*)&hash, nHashesDone);
// Check if something found
if (nNonceFound != -1)
if (!ptx->IsFinal())
return false;
if (ptx->GetDepthInMainChain() >= 1)
- return true;
+ continue;
if (!ptx->IsFromMe())
return false;
-Wl,-Bdynamic \
-l gthread-2.0 \
-l z \
- -l dl
+ -l dl \
+ -l pthread
DEBUGFLAGS=-g -D__WXDEBUG__
cryptopp/obj/%.o: cryptopp/%.cpp
$(CXX) -c $(CXXFLAGS) -O3 -o $@ $<
-obj/sha256.o: sha256.cpp
- $(CXX) -c $(CXXFLAGS) -msse2 -O3 -march=amdfam10 -o $@ $<
-
-bitcoin: $(OBJS) obj/ui.o obj/uibase.o obj/sha256.o
+bitcoin: $(OBJS) obj/ui.o obj/uibase.o
$(CXX) $(CXXFLAGS) -o $@ $^ $(WXLIBS) $(LIBS)
obj/nogui/%.o: %.cpp $(HEADERS)
$(CXX) -c $(CXXFLAGS) -o $@ $<
-bitcoind: $(OBJS:obj/%=obj/nogui/%) obj/sha256.o
+bitcoind: $(OBJS:obj/%=obj/nogui/%)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LIBS)
{
if (fHelp || params.size() > 2)
throw runtime_error(
- "listtransactions [account] [count=10]\n"
- "Returns up to [count] most recent transactions for account <account>.");
+ "listtransactions [account] [count=10] [from=0]\n"
+ "Returns up to [count] most recent transactions skipping the first [from] transactions for account [account].");
string strAccount = "*";
if (params.size() > 0)
int nCount = 10;
if (params.size() > 1)
nCount = params[1].get_int();
+ int nFrom = 0;
+ if (params.size() > 2)
+ nFrom = params[2].get_int();
Array ret;
CWalletDB walletdb;
}
// Now: iterate backwards until we have nCount items to return:
- for (TxItems::reverse_iterator it = txByTime.rbegin(); it != txByTime.rend(); ++it)
+ TxItems::reverse_iterator it = txByTime.rbegin();
+ for (std::advance(it, nFrom); it != txByTime.rend(); ++it)
{
CWalletTx *const pwtx = (*it).second.first;
if (pwtx != 0)
{
string strHeader = str.substr(0, nColon);
boost::trim(strHeader);
+ boost::to_lower(strHeader);
string strValue = str.substr(nColon+1);
boost::trim(strValue);
mapHeadersRet[strHeader] = strValue;
- if (strHeader == "Content-Length")
+ if (strHeader == "content-length")
nLen = atoi(strValue.c_str());
}
}
bool HTTPAuthorized(map<string, string>& mapHeaders)
{
- string strAuth = mapHeaders["Authorization"];
+ string strAuth = mapHeaders["authorization"];
if (strAuth.substr(0,6) != "Basic ")
return false;
string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64);
}
// Check authorization
- if (mapHeaders.count("Authorization") == 0)
+ if (mapHeaders.count("authorization") == 0)
{
stream << HTTPReply(401, "") << std::flush;
continue;
if (strMethod == "sendfrom" && n > 2) ConvertTo<double>(params[2]);
if (strMethod == "sendfrom" && n > 3) ConvertTo<boost::int64_t>(params[3]);
if (strMethod == "listtransactions" && n > 1) ConvertTo<boost::int64_t>(params[1]);
+ if (strMethod == "listtransactions" && n > 2) ConvertTo<boost::int64_t>(params[2]);
if (strMethod == "listaccounts" && n > 0) ConvertTo<boost::int64_t>(params[0]);
if (strMethod == "sendmany" && n > 1)
{
class CAutoFile;
static const unsigned int MAX_SIZE = 0x02000000;
-static const int VERSION = 32100;
+static const int VERSION = 32200;
static const char* pszSubVer = "";
static const bool VERSION_IS_BETA = true;
Close(true);
}
-void CMainFrame::OnMenuOptionsGenerate(wxCommandEvent& event)
-{
- // Options->Generate Coins
- GenerateBitcoins(event.IsChecked());
-}
-
void CMainFrame::OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event)
{
event.Check(fGenerateBitcoins);
// 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);
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());
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();
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();
m_staticTextInstructions->SetFont(fontTmp);
SetSize(725, 180);
#endif
-
+
// Set Icon
wxIcon iconSend;
iconSend.CopyFromBitmap(wxBitmap(send16noshadow_xpm));
{
wxMessageBox(strError + " ", _("Sending..."));
EndModal(false);
+ 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"));
extern int g_isPainting;
g_isPainting = 10000;
#endif
-#ifdef GUI
- wxImage::AddHandler(new wxPNGHandler);
-#endif
#if defined(__WXMSW__ ) || defined(__WXMAC_OSX__)
SetAppName("Bitcoin");
#else
void OnPaint(wxPaintEvent& event);
void OnPaintListCtrl(wxPaintEvent& event);
void OnMenuFileExit(wxCommandEvent& event);
- void OnMenuOptionsGenerate(wxCommandEvent& event);
void OnUpdateUIOptionsGenerate(wxUpdateUIEvent& event);
void OnMenuOptionsChangeYourAddress(wxCommandEvent& event);
void OnMenuOptionsOptions(wxCommandEvent& event);
// Event handlers
void OnListBox(wxCommandEvent& event);
void OnKillFocusTransactionFee(wxFocusEvent& event);
- void OnCheckBoxLimitProcessors(wxCommandEvent& event);
void OnCheckBoxUseProxy(wxCommandEvent& event);
void OnKillFocusProxy(wxFocusEvent& event);
// Event handlers
void OnLeftButtonDClick(wxTaskBarIconEvent& event);
void OnMenuRestore(wxCommandEvent& event);
+ void OnMenuSend(wxCommandEvent& event);
void OnMenuOptions(wxCommandEvent& event);
void OnUpdateUIGenerate(wxUpdateUIEvent& event);
void OnMenuGenerate(wxCommandEvent& event);
m_menubar->Append( m_menuFile, _("&File") );
m_menuOptions = new wxMenu();
- wxMenuItem* m_menuOptionsGenerateBitcoins;
- m_menuOptionsGenerateBitcoins = new wxMenuItem( m_menuOptions, wxID_OPTIONSGENERATEBITCOINS, wxString( _("&Generate Coins") ) , wxEmptyString, wxITEM_CHECK );
- m_menuOptions->Append( m_menuOptionsGenerateBitcoins );
-
wxMenuItem* m_menuOptionsChangeYourAddress;
m_menuOptionsChangeYourAddress = new wxMenuItem( m_menuOptions, wxID_ANY, wxString( _("&Your Receiving Addresses...") ) , wxEmptyString, wxITEM_NORMAL );
m_menuOptions->Append( m_menuOptionsChangeYourAddress );
this->Connect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
this->Connect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaint ) );
this->Connect( m_menuFileExit->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuFileExit ) );
- this->Connect( m_menuOptionsGenerateBitcoins->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsGenerate ) );
- this->Connect( m_menuOptionsGenerateBitcoins->GetId(), wxEVT_UPDATE_UI, wxUpdateUIEventHandler( CMainFrameBase::OnUpdateUIOptionsGenerate ) );
this->Connect( m_menuOptionsChangeYourAddress->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeYourAddress ) );
this->Connect( m_menuOptionsOptions->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsOptions ) );
this->Connect( m_menuHelpAbout->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuHelpAbout ) );
this->Disconnect( wxEVT_MOUSEWHEEL, wxMouseEventHandler( CMainFrameBase::OnMouseEvents ) );
this->Disconnect( wxEVT_PAINT, wxPaintEventHandler( CMainFrameBase::OnPaint ) );
this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuFileExit ) );
- this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsGenerate ) );
- this->Disconnect( wxID_ANY, wxEVT_UPDATE_UI, wxUpdateUIEventHandler( CMainFrameBase::OnUpdateUIOptionsGenerate ) );
this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsChangeYourAddress ) );
this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuOptionsOptions ) );
this->Disconnect( wxID_ANY, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( CMainFrameBase::OnMenuHelpAbout ) );
bSizer69->Add( 0, 16, 0, wxEXPAND, 5 );
- wxBoxSizer* bSizer71;
- bSizer71 = new wxBoxSizer( wxHORIZONTAL );
-
- m_checkBoxLimitProcessors = new wxCheckBox( m_panelMain, wxID_ANY, _("&Limit coin generation to"), wxDefaultPosition, wxDefaultSize, 0 );
- bSizer71->Add( m_checkBoxLimitProcessors, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- m_spinCtrlLimitProcessors = new wxSpinCtrl( m_panelMain, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 48,-1 ), wxSP_ARROW_KEYS, 1, 999, 1 );
- bSizer71->Add( m_spinCtrlLimitProcessors, 0, wxALIGN_CENTER_VERTICAL, 5 );
-
- m_staticText35 = new wxStaticText( m_panelMain, wxID_ANY, _("processors"), wxDefaultPosition, wxDefaultSize, 0 );
- m_staticText35->Wrap( -1 );
- bSizer71->Add( m_staticText35, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
-
- bSizer69->Add( bSizer71, 0, 0, 5 );
-
m_checkBoxStartOnSystemStartup = new wxCheckBox( m_panelMain, wxID_ANY, _("&Start Bitcoin on system startup"), wxDefaultPosition, wxDefaultSize, 0 );
bSizer69->Add( m_checkBoxStartOnSystemStartup, 0, wxALL, 5 );
// Connect Events
m_listBox->Connect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( COptionsDialogBase::OnListBox ), NULL, this );
- m_checkBoxLimitProcessors->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxLimitProcessors ), NULL, this );
m_checkBoxMinimizeToTray->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxMinimizeToTray ), NULL, this );
m_checkBoxUseProxy->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxUseProxy ), NULL, this );
m_textCtrlProxyIP->Connect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
{
// Disconnect Events
m_listBox->Disconnect( wxEVT_COMMAND_LISTBOX_SELECTED, wxCommandEventHandler( COptionsDialogBase::OnListBox ), NULL, this );
- m_checkBoxLimitProcessors->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxLimitProcessors ), NULL, this );
m_checkBoxMinimizeToTray->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxMinimizeToTray ), NULL, this );
m_checkBoxUseProxy->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( COptionsDialogBase::OnCheckBoxUseProxy ), NULL, this );
m_textCtrlProxyIP->Disconnect( wxEVT_KILL_FOCUS, wxFocusEventHandler( COptionsDialogBase::OnKillFocusProxy ), NULL, this );
#include <wx/dialog.h>
#include <wx/listbox.h>
#include <wx/checkbox.h>
-#include <wx/spinctrl.h>
#include <wx/scrolwin.h>
#include <wx/statbmp.h>
///////////////////////////////////////////////////////////////////////////
#define wxID_MAINFRAME 1000
-#define wxID_OPTIONSGENERATEBITCOINS 1001
-#define wxID_BUTTONSEND 1002
-#define wxID_BUTTONRECEIVE 1003
-#define wxID_TEXTCTRLADDRESS 1004
-#define wxID_BUTTONNEW 1005
-#define wxID_BUTTONCOPY 1006
-#define wxID_PROXYIP 1007
-#define wxID_PROXYPORT 1008
-#define wxID_TRANSACTIONFEE 1009
-#define wxID_TEXTCTRLPAYTO 1010
-#define wxID_BUTTONPASTE 1011
-#define wxID_BUTTONADDRESSBOOK 1012
-#define wxID_TEXTCTRLAMOUNT 1013
-#define wxID_CHOICETRANSFERTYPE 1014
-#define wxID_LISTCTRL 1015
-#define wxID_BUTTONRENAME 1016
-#define wxID_PANELSENDING 1017
-#define wxID_LISTCTRLSENDING 1018
-#define wxID_PANELRECEIVING 1019
-#define wxID_LISTCTRLRECEIVING 1020
-#define wxID_BUTTONDELETE 1021
-#define wxID_BUTTONEDIT 1022
-#define wxID_TEXTCTRL 1023
+#define wxID_BUTTONSEND 1001
+#define wxID_BUTTONRECEIVE 1002
+#define wxID_TEXTCTRLADDRESS 1003
+#define wxID_BUTTONNEW 1004
+#define wxID_BUTTONCOPY 1005
+#define wxID_PROXYIP 1006
+#define wxID_PROXYPORT 1007
+#define wxID_TRANSACTIONFEE 1008
+#define wxID_TEXTCTRLPAYTO 1009
+#define wxID_BUTTONPASTE 1010
+#define wxID_BUTTONADDRESSBOOK 1011
+#define wxID_TEXTCTRLAMOUNT 1012
+#define wxID_CHOICETRANSFERTYPE 1013
+#define wxID_LISTCTRL 1014
+#define wxID_BUTTONRENAME 1015
+#define wxID_PANELSENDING 1016
+#define wxID_LISTCTRLSENDING 1017
+#define wxID_PANELRECEIVING 1018
+#define wxID_LISTCTRLRECEIVING 1019
+#define wxID_BUTTONDELETE 1020
+#define wxID_BUTTONEDIT 1021
+#define wxID_TEXTCTRL 1022
///////////////////////////////////////////////////////////////////////////////
/// Class CMainFrameBase
virtual void OnMouseEvents( wxMouseEvent& event ) { event.Skip(); }
virtual void OnPaint( wxPaintEvent& event ) { event.Skip(); }
virtual void OnMenuFileExit( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnMenuOptionsGenerate( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnUpdateUIOptionsGenerate( wxUpdateUIEvent& event ) { event.Skip(); }
virtual void OnMenuOptionsChangeYourAddress( wxCommandEvent& event ) { event.Skip(); }
virtual void OnMenuOptionsOptions( wxCommandEvent& event ) { event.Skip(); }
virtual void OnMenuHelpAbout( wxCommandEvent& event ) { event.Skip(); }
wxScrolledWindow* m_scrolledWindow;
wxPanel* m_panelMain;
- wxCheckBox* m_checkBoxLimitProcessors;
- wxSpinCtrl* m_spinCtrlLimitProcessors;
- wxStaticText* m_staticText35;
wxCheckBox* m_checkBoxStartOnSystemStartup;
wxCheckBox* m_checkBoxMinimizeToTray;
wxCheckBox* m_checkBoxUseUPnP;
// Virtual event handlers, overide them in your derived class
virtual void OnListBox( wxCommandEvent& event ) { event.Skip(); }
- virtual void OnCheckBoxLimitProcessors( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCheckBoxMinimizeToTray( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCheckBoxUseProxy( wxCommandEvent& event ) { event.Skip(); }
virtual void OnKillFocusProxy( wxFocusEvent& event ) { event.Skip(); }