1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| #include "mainframe.h"
#include "mythread.h"
MainFrame::MainFrame(wxFrame *frame, const wxString& title)
: wxFrame(frame, -1, title)
{
m_thread=NULL;
wxPanel *mainpanel=new wxPanel(this, -1);
wxBoxSizer *mainsizer=new wxBoxSizer(wxVERTICAL);
m_btnStartStop=new wxButton(mainpanel, -1, _T("Start communication thread"));
mainsizer->Add(m_btnStartStop, 0, wxALL, 5);
wxBoxSizer *hsizer=new wxBoxSizer(wxHORIZONTAL);
m_txtValue=new wxTextCtrl(mainpanel, -1, _T("Enter text here..."));
hsizer->Add(m_txtValue, 1, wxALL|wxALIGN_CENTER_VERTICAL, 0);
m_btnSend=new wxButton(mainpanel, -1, _T("Send"));
m_btnSend->Disable();
hsizer->Add(m_btnSend, 0, wxLEFT|wxALIGN_CENTER_VERTICAL, 5);
mainsizer->Add(hsizer, 0, wxALL|wxEXPAND, 5);
mainpanel->SetSizer(mainsizer);
Connect(m_btnStartStop->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MainFrame::OnStartStopClicked));
Connect(m_btnSend->GetId(), wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MainFrame::OnSendStringClicked));
Connect(wxEVT_COMMAND_TEXT_UPDATED , wxCommandEventHandler(MainFrame::OnTextChanged));
Connect(wxEVT_MYTHREAD_ENDED, wxCommandEventHandler(MainFrame::OnThreadEnded));
}
MainFrame::~MainFrame()
{
}
void MainFrame::OnTextChanged(wxCommandEvent &event)
{
if ((m_txtValue->IsEmpty()) || (m_thread==NULL))
m_btnSend->Disable();
else
m_btnSend->Enable();
}
void MainFrame::OnSendStringClicked(wxCommandEvent &event)
{
m_values.Add(m_txtValue->GetValue());
m_txtValue->SetValue(wxEmptyString);
}
void MainFrame::OnStartStopClicked(wxCommandEvent &event)
{
if (m_thread==NULL)
{
m_thread=new MyThread(this);
m_thread->Create();
m_thread->Run();
m_btnStartStop->SetLabel(_T("Stop communication thread"));
if (!m_txtValue->IsEmpty()) m_btnSend->Enable();
} else {
m_thread->Delete();
}
}
void MainFrame::OnThreadEnded(wxCommandEvent &event)
{
m_thread=NULL;
m_btnStartStop->SetLabel(_T("Start communication thread"));
m_btnSend->Disable();
}
wxString MainFrame::GetStringToSend()
{
if (m_values.IsEmpty()) return wxEmptyString;
wxString sVal=m_values[0];
m_values.RemoveAt(0,1);
return sVal;
} |
Partager