diff options
Diffstat (limited to 'plugins/MirandaG15/src/CEventScreen.cpp')
-rw-r--r-- | plugins/MirandaG15/src/CEventScreen.cpp | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/plugins/MirandaG15/src/CEventScreen.cpp b/plugins/MirandaG15/src/CEventScreen.cpp new file mode 100644 index 0000000000..cda38b07b4 --- /dev/null +++ b/plugins/MirandaG15/src/CEventScreen.cpp @@ -0,0 +1,239 @@ +#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<CListEntry<CEventLogEntry*>*>::iterator iter = m_EventLog.begin();
+ CListItem<CEventLogEntry*> *pItem = NULL;
+ while(iter != m_EventLog.end())
+ {
+ pItem = static_cast<CListItem<CEventLogEntry*>*>(*iter);
+ pItem->GetItemData()->strTimestamp = CAppletManager::GetFormattedTimestamp(&pItem->GetItemData()->Time) + _T(" ");
+ 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) + _T(" ");
+ 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<CEventLogEntry*> *pItem = m_EventLog.GetSelectedEntry();
+ if(!pItem || pItem->GetType() != ITEM)
+ return;
+ CEventLogEntry *pEntry = ((CListItem<CEventLogEntry*>*)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<CEventLogEntry*> *pItem = m_EventLog.GetSelectedEntry();
+ if(!pItem || pItem->GetType() != ITEM)
+ return;
+ CEventLogEntry *pEntry = ((CListItem<CEventLogEntry*>*)pItem)->GetItemData();
+
+ if(!pEntry->hContact)
+ return;
+
+ // if the contact is an irc chatroom, check if it is hidden (user left the channel)
+ char *szProto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)pEntry->hContact, 0);
+ CIRCConnection *pIRCCon = CAppletManager::GetInstance()->GetIRCConnection(toTstring(szProto));
+
+ if(pIRCCon && db_get_b(pEntry->hContact, szProto, "ChatRoom", 0) != 0 &&
+ db_get_b((HANDLE)pEntry->hContact,"CList","Hidden",0))
+ 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 iButton)
+{
+
+}
+
+//************************************************************************
+// 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()
+{
+}
\ No newline at end of file |