#include "FileZilla.h"
#include "led.h"
#include "filezillaapp.h"
#include "state.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define TIMER_ID (wxID_HIGHEST + 1)
BEGIN_EVENT_TABLE(CLed, wxWindow)
EVT_PAINT(CLed::OnPaint)
EVT_TIMER(TIMER_ID, CLed::OnTimer)
END_EVENT_TABLE()
#define LED_OFF 1
#define LED_ON 0
CLed::CLed(wxWindow *parent, unsigned int index, CState* pState)
: wxWindow(parent, -1, wxDefaultPosition, wxSize(11, 11))
{
m_pState = pState;
if (index == 1)
m_index = 1;
else
m_index = 0;
m_ledState = LED_OFF;
wxLogNull *tmp = new wxLogNull;
m_bitmap.LoadFile(wxGetApp().GetResourceDir() + _T("leds.png"), wxBITMAP_TYPE_PNG);
delete tmp;
if (m_bitmap.Ok())
{
m_dc = new wxMemoryDC;
m_dc->SelectObject(m_bitmap);
}
m_timer.SetOwner(this, TIMER_ID);
}
CLed::~CLed()
{
m_timer.Stop();
delete m_dc;
}
void CLed::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
if (!m_dc)
return;
dc.Blit(0, 0, 11, 11, m_dc, m_ledState * 11, 11 * m_index, wxCOPY, true);
}
void CLed::Set()
{
if (m_ledState != LED_ON)
{
m_ledState = LED_ON;
Refresh(false);
}
}
void CLed::Unset()
{
if (m_ledState != LED_OFF)
{
m_ledState = LED_OFF;
Refresh(false);
}
}
void CLed::OnTimer(wxTimerEvent& event)
{
if (event.GetId() != TIMER_ID)
{
event.Skip();
return;
}
if (!m_timer.IsRunning())
return;
if (!m_pState->m_pEngine)
{
m_timer.Stop();
return;
}
if (!m_pState->m_pEngine->IsActive(m_index == 0))
{
Unset();
m_timer.Stop();
}
return;
}
void CLed::Ping()
{
if (m_timer.IsRunning())
return;
Set();
m_timer.Start(100);
}
syntax highlighted by Code2HTML, v. 0.9.1