#include "stdafx.h" #include "CEventScreen.h" #include "CConfig.h" #include "CAppletManager.h" //************************************************************************ // Constructor //************************************************************************ CEventScreen::CEventScreen() { } //************************************************************************ // Destructor //************************************************************************ CEventScreen::~CEventScreen() { } //************************************************************************ // Initializes the screen //************************************************************************ bool CEventScreen::Initialize() { if (!CScreen::Initialize()) return false; m_EventLog.Initialize(); m_EventLog.SetOrigin(0, 0); m_EventLog.SetSize(GetWidth() - 5, GetHeight() - (CConfig::GetBoolSetting(SHOW_LABELS) ? 6 : 0)); m_EventLog.SetFont(CConfig::GetFont(FONT_LOG)); AddObject(&m_EventLog); m_Scrollbar.Initialize(); m_Scrollbar.SetOrigin(GetWidth() - 4, 0); m_Scrollbar.SetSize(4, GetHeight() - (CConfig::GetBoolSetting(SHOW_LABELS) ? 5 : 0)); m_EventLog.SetScrollbar(&m_Scrollbar); AddObject(&m_Scrollbar); SetButtonBitmap(0, IDB_UP); SetButtonBitmap(1, IDB_DOWN); SetButtonBitmap(2, IDB_CLIST); SetButtonBitmap(3, NULL); return true; } //************************************************************************ // Shutdown the screen //************************************************************************ bool CEventScreen::Shutdown() { if (!CScreen::Shutdown()) return false; return true; } //************************************************************************ // Updates the screen //************************************************************************ bool CEventScreen::Update() { if (!CScreen::Update()) return false; return true; } //************************************************************************ // Draws the screen //************************************************************************ bool CEventScreen::Draw(CLCDGfx *pGfx) { if (!CScreen::Draw(pGfx)) return false; return true; } //************************************************************************ // Called when the screen size has changed //************************************************************************ void CEventScreen::OnSizeChanged() { CScreen::OnSizeChanged(); m_EventLog.SetFont(CConfig::GetFont(FONT_LOG)); m_EventLog.SetSize(GetWidth() - 5, GetHeight() - (CConfig::GetBoolSetting(SHOW_LABELS) ? 6 : 0)); m_Scrollbar.SetOrigin(GetWidth() - 4, 0); m_Scrollbar.SetSize(4, GetHeight() - (CConfig::GetBoolSetting(SHOW_LABELS) ? 5 : 0)); } //************************************************************************ // Called when the configuration has changed //************************************************************************ void CEventScreen::OnConfigChanged() { CScreen::OnConfigChanged(); m_EventLog.SetFont(CConfig::GetFont(FONT_LOG)); m_EventLog.SetSize(GetWidth() - 5, GetHeight() - (CConfig::GetBoolSetting(SHOW_LABELS) ? 6 : 0)); // Update all timestamps list*>::iterator iter = m_EventLog.begin(); CListItem *pItem = nullptr; while (iter != m_EventLog.end()) { pItem = static_cast*>(*iter); pItem->GetItemData()->strTimestamp = CAppletManager::GetFormattedTimestamp(&pItem->GetItemData()->Time) + L" "; iter++; } m_Scrollbar.SetSize(4, GetHeight() - (CConfig::GetBoolSetting(SHOW_LABELS) ? 5 : 0)); } //************************************************************************ // Called when an event is received //************************************************************************ void CEventScreen::OnEventReceived(CEvent *pEvent) { // check if the event needs to be listed if (!pEvent->bLog) return; // create a list entry structure CEventLogEntry *pEntry = new CEventLogEntry(); pEntry->hContact = pEvent->hContact; pEntry->eType = pEvent->eType; pEntry->Time = pEvent->Time; pEntry->strTimestamp = CAppletManager::GetFormattedTimestamp(&pEvent->Time) + L" "; pEntry->strValue = pEvent->strDescription; // add it to the list and scroll to it m_EventLog.AddItem(pEntry); UpdateChatButton(); } //************************************************************************ // Updates the 4th softkey label //************************************************************************ void CEventScreen::UpdateChatButton() { CListEntry *pItem = m_EventLog.GetSelectedEntry(); if (!pItem || pItem->GetType() != ITEM) return; CEventLogEntry *pEntry = ((CListItem*)pItem)->GetItemData(); if (pEntry->hContact) SetButtonBitmap(3, IDB_CHAT); else SetButtonBitmap(3, NULL); } //************************************************************************ // Called when an LCD-button is pressed //************************************************************************ void CEventScreen::OnLCDButtonDown(int iButton) { if (iButton == LGLCDBUTTON_CANCEL) { CAppletManager::GetInstance()->ActivatePreviousScreen(); } else if (iButton == LGLCDBUTTON_BUTTON1 || iButton == LGLCDBUTTON_DOWN) { m_EventLog.ScrollDown(); UpdateChatButton(); } else if (iButton == LGLCDBUTTON_BUTTON0 || iButton == LGLCDBUTTON_UP) { m_EventLog.ScrollUp(); UpdateChatButton(); } else if (iButton == LGLCDBUTTON_BUTTON2 || iButton == LGLCDBUTTON_MENU) { CAppletManager::GetInstance()->ActivateCListScreen(); } else if (iButton == LGLCDBUTTON_BUTTON3 || iButton == LGLCDBUTTON_OK) { CListEntry *pItem = m_EventLog.GetSelectedEntry(); if (!pItem || pItem->GetType() != ITEM) return; CEventLogEntry *pEntry = ((CListItem*)pItem)->GetItemData(); if (!pEntry->hContact) return; // if the contact is an irc chatroom, check if it is hidden (user left the channel) char *szProto = Proto_GetBaseAccountName(pEntry->hContact); CIRCConnection *pIRCCon = CAppletManager::GetInstance()->GetIRCConnection(toTstring(szProto)); if (pIRCCon && Contact::IsGroupChat(pEntry->hContact, szProto) && Contact::IsHidden(pEntry->hContact)) return; CAppletManager::GetInstance()->ActivateChatScreen(pEntry->hContact); } } //************************************************************************ // Called when an LCD-button event is repeated //************************************************************************ void CEventScreen::OnLCDButtonRepeated(int iButton) { if (iButton == LGLCDBUTTON_BUTTON1 || iButton == LGLCDBUTTON_DOWN) { m_EventLog.ScrollDown(); UpdateChatButton(); } else if (iButton == LGLCDBUTTON_BUTTON0 || iButton == LGLCDBUTTON_UP) { m_EventLog.ScrollUp(); UpdateChatButton(); } } //************************************************************************ // Called when an LCD-button is released //************************************************************************ void CEventScreen::OnLCDButtonUp(int) { } //************************************************************************ // Called when the screen is activated //************************************************************************ void CEventScreen::OnActivation() { } //************************************************************************ // Called when the screen is deactivated //************************************************************************ void CEventScreen::OnDeactivation() { } //************************************************************************ // Called when the screen has expired //************************************************************************ void CEventScreen::OnExpiration() { }