From 4d01f5f5096cb4d22c4a7ba17cc82977c7f5f19b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Tue, 29 Oct 2013 18:17:04 +0000 Subject: Adopted MirandaG15 plugin First compilable version and 32-bit only. git-svn-id: http://svn.miranda-ng.org/main/trunk@6681 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MirandaG15/src/CNotificationScreen.cpp | 374 +++++++++++++++++++++++++ 1 file changed, 374 insertions(+) create mode 100644 plugins/MirandaG15/src/CNotificationScreen.cpp (limited to 'plugins/MirandaG15/src/CNotificationScreen.cpp') diff --git a/plugins/MirandaG15/src/CNotificationScreen.cpp b/plugins/MirandaG15/src/CNotificationScreen.cpp new file mode 100644 index 0000000000..d950eccac8 --- /dev/null +++ b/plugins/MirandaG15/src/CNotificationScreen.cpp @@ -0,0 +1,374 @@ +#include "stdafx.h" +#include "CNotificationScreen.h" +#include "CConfig.h" +#include "CAppletManager.h" + +//************************************************************************ +// Constructor +//************************************************************************ +CNotificationScreen::CNotificationScreen() +{ + m_pEntry = NULL; + //m_bMessageMode = false; +} + +//************************************************************************ +// Destructor +//************************************************************************ +CNotificationScreen::~CNotificationScreen() +{ +} + +//************************************************************************ +// Initializes the screen +//************************************************************************ +bool CNotificationScreen::Initialize() +{ + if(!CScreen::Initialize()) + return false; + + m_EventText.Initialize(); + m_MessageText.Initialize(); + m_TitleText.Initialize(); + m_Scrollbar.Initialize(); + m_Timestamp.Initialize(); + //m_Input.Initialize(); + //m_Input.Show(0); + + m_TitleText.SetText(_T("Miranda-IM")); + m_TitleText.SetAlignment(DT_LEFT); + + m_Timestamp.SetAlignment(DT_RIGHT); + + m_EventText.SetAlignment(DT_CENTER); + m_EventText.SetWordWrap(TRUE); + + m_MessageText.SetScrollbar(&m_Scrollbar); + + UpdateObjects(); + + AddObject(&m_Scrollbar); + AddObject(&m_EventText); + AddObject(&m_MessageText); + AddObject(&m_TitleText); + AddObject(&m_Timestamp); + //AddObject(&m_Input); + + SetButtonBitmap(0,IDB_UP); + SetButtonBitmap(1,IDB_DOWN); + + return true; +} + +//************************************************************************ +// Shutdown the screen +//************************************************************************ +bool CNotificationScreen::Shutdown() +{ + CNotificationEntry *pEntry = NULL; + while(!m_LNotifications.empty()) + { + pEntry = *(m_LNotifications.begin()); + m_LNotifications.pop_front(); + delete pEntry; + } + + if(!CScreen::Shutdown()) + return false; + + return true; +} + +//************************************************************************ +// Updates the screen +//************************************************************************ +bool CNotificationScreen::Update() +{ + if(!CScreen::Update()) + return false; + + return true; +} + +//************************************************************************ +// Draws the screen +//************************************************************************ +bool CNotificationScreen::Draw(CLCDGfx *pGfx) +{ + if(!CScreen::Draw(pGfx)) + return false; + + if(CConfig::GetIntSetting(NOTIFY_TITLE) != NOTIFY_TITLE_HIDE) + { + int iTitleHeight = CConfig::GetFontHeight(FONT_TITLE); + pGfx->DrawLine(0,iTitleHeight < 7?7:iTitleHeight,GetWidth(),iTitleHeight < 7?7:iTitleHeight); + if(m_pEntry) + { + int iOffset = (iTitleHeight-(iTitleHeight>8?8:6))/2; + HBITMAP hBitmap = CAppletManager::GetInstance()->GetEventBitmap(m_pEntry->eType,iTitleHeight>8); + pGfx->DrawBitmap(0,iOffset,iTitleHeight>8?8:6,iTitleHeight>8?8:6,hBitmap); + } + } + return true; +} + +//************************************************************************ +// displays the specified notification +//************************************************************************ +void CNotificationScreen::DisplayNotification(CNotificationEntry *pEntry) +{ + if(m_pEntry != NULL) + delete m_pEntry; + + + tstring strTime = CAppletManager::GetFormattedTimestamp(&pEntry->Time); + + m_pEntry = pEntry; + if(CConfig::GetIntSetting(NOTIFY_TITLE) == NOTIFY_TITLE_NAME || pEntry->strTitle.empty()) + m_TitleText.SetText(_T("Miranda-IM")); + else + m_TitleText.SetText(pEntry->strTitle); + + if(CConfig::GetBoolSetting(NOTIFY_TIMESTAMPS)) + m_Timestamp.SetText(strTime); + else + m_Timestamp.SetText(_T("")); + + + if(pEntry->hContact) + SetButtonBitmap(3,IDB_CHAT); + else + SetButtonBitmap(3,NULL); + + if(pEntry->bMessage) + { + SetButtonBitmap(0,IDB_UP); + SetButtonBitmap(1,IDB_DOWN); + + m_MessageText.Show(1); + m_Scrollbar.Show(1); + m_EventText.Show(0); + m_MessageText.SetText(pEntry->strText.c_str()); + } + else + { + SetButtonBitmap(0,NULL); + SetButtonBitmap(1,NULL); + + m_Scrollbar.Show(0); + m_MessageText.Show(0); + m_EventText.Show(1); + m_EventText.SetText(pEntry->strText.c_str()); + } +} + +//************************************************************************ +// updates all objects +//************************************************************************ +void CNotificationScreen::UpdateObjects() +{ + int iHeight = GetHeight() - (CConfig::GetBoolSetting(SHOW_LABELS)?6:0); + int iOrigin = 0; + + if(CConfig::GetIntSetting(NOTIFY_TITLE) == NOTIFY_TITLE_HIDE) + { + m_TitleText.Show(false); + m_Timestamp.Show(false); + } + else + { + iOrigin = CConfig::GetFontHeight(FONT_TITLE); + iHeight -= iOrigin; + m_Timestamp.Show(true); + m_TitleText.Show(true); + } + + + m_MessageText.SetFont(CConfig::GetFont(FONT_NOTIFICATION)); + m_TitleText.SetFont(CConfig::GetFont(FONT_TITLE)); + m_EventText.SetFont(CConfig::GetFont(FONT_NOTIFICATION)); + m_Timestamp.SetFont(CConfig::GetFont(FONT_TITLE)); + + m_Timestamp.SetSize((GetWidth()/3),CConfig::GetFontHeight(FONT_TITLE)); + m_Timestamp.SetOrigin((GetWidth()/3)*2,0); + + m_TitleText.SetSize(((GetWidth()/3)*2) -5,CConfig::GetFontHeight(FONT_TITLE)); + m_TitleText.SetOrigin(9,0); + + m_EventText.SetOrigin(0,iOrigin + 1); + m_EventText.SetSize(GetWidth()-4, iHeight); + + m_MessageText.SetOrigin(0, iOrigin+1); + m_MessageText.SetSize(GetWidth()-4, iHeight); + + //m_Input.SetOrigin(0, iOrigin+1); + //m_Input.SetSize(GetWidth()-4, iHeight); + + m_Scrollbar.SetOrigin(GetWidth()-4,iOrigin+1); + m_Scrollbar.SetSize(4,iHeight); +} + +//************************************************************************ +// Called when the screen size has changed +//************************************************************************ +void CNotificationScreen::OnSizeChanged() +{ + CScreen::OnSizeChanged(); + + UpdateObjects(); +} + +//************************************************************************ +// Called when the configuration has changed +//************************************************************************ +void CNotificationScreen::OnConfigChanged() +{ + CScreen::OnConfigChanged(); + + UpdateObjects(); +} + +//************************************************************************ +// Called when an event is received +//************************************************************************ +void CNotificationScreen::OnEventReceived(CEvent *pEvent) +{ + // check wether this events needs notification + if(!pEvent->bNotification) + return; + + CNotificationEntry *pEntry = new CNotificationEntry(); + pEntry->eType = pEvent->eType; + pEntry->strTitle = pEvent->strSummary; + if(pEvent->eType == EVENT_MSG_RECEIVED || + (pEvent->eType == EVENT_IRC_RECEIVED && (pEvent->iValue == GC_EVENT_MESSAGE || pEvent->iValue == GC_EVENT_NOTICE))) + { + pEntry->bMessage = true; + tstring strUser = CAppletManager::GetContactDisplayname(pEvent->hContact); + + if(CConfig::GetIntSetting(NOTIFY_TITLE) == NOTIFY_TITLE_INFO) + pEntry->strText = pEvent->strValue; + else + pEntry->strText = strUser + (pEvent->eType == EVENT_IRC_RECEIVED?_T(" - "):_T(": "))+ pEvent->strValue; + } + else + { + pEntry->bMessage = false; + if(CConfig::GetIntSetting(NOTIFY_TITLE) == NOTIFY_TITLE_INFO && pEvent->eType == EVENT_IRC_RECEIVED ) + pEntry->strText = pEvent->strValue; + else + pEntry->strText = pEvent->strDescription; + } + + pEntry->hContact = pEvent->hContact; + pEntry->Time = pEvent->Time; + + if(m_pEntry) + { + m_LNotifications.push_back(pEntry); + SetButtonBitmap(2,IDB_NEXT); + } + else + { + DisplayNotification(pEntry); + SetButtonBitmap(2,NULL); + } +} +//************************************************************************ +// Called when an LCD-button is pressed +//************************************************************************ +void CNotificationScreen::OnLCDButtonDown(int iButton) +{ + CScreen::OnLCDButtonDown(iButton); + + if((iButton == LGLCDBUTTON_BUTTON2 || iButton == LGLCDBUTTON_RIGHT) && m_LNotifications.size() >= 1) + { + CNotificationEntry *pEntry = *(m_LNotifications.begin()); + m_LNotifications.pop_front(); + + if(m_LNotifications.size() >= 1) + SetButtonBitmap(2,IDB_NEXT); + else + SetButtonBitmap(2,NULL); + + DisplayNotification(pEntry); + SetExpiration(CConfig::GetIntSetting(NOTIFY_DURATION)*1000); + } + else if((iButton == LGLCDBUTTON_BUTTON3 || iButton == LGLCDBUTTON_OK) && m_pEntry && m_pEntry->hContact) + { + SetExpiration(0); + + CLCDConnection *pLCDCon = CAppletManager::GetInstance()->GetLCDConnection(); + pLCDCon->SetAsForeground(1); + pLCDCon->SetAsForeground(0); + CAppletManager::GetInstance()->ActivateChatScreen(m_pEntry->hContact); + } else if(!m_MessageText.IsVisible()) { + SetExpiration(0); + } else { + if(iButton == LGLCDBUTTON_BUTTON1 || iButton == LGLCDBUTTON_DOWN) { + m_MessageText.ScrollDown(); + } else if(iButton == LGLCDBUTTON_BUTTON0 || iButton == LGLCDBUTTON_UP) { + m_MessageText.ScrollUp(); + } + SetExpiration(CConfig::GetIntSetting(NOTIFY_DURATION)*1000); + } +} + +//************************************************************************ +// Called when an LCD-button event is repeated +//************************************************************************ +void CNotificationScreen::OnLCDButtonRepeated(int iButton) +{ + CScreen::OnLCDButtonDown(iButton); + if(m_MessageText.IsVisible()) { + if(iButton == LGLCDBUTTON_BUTTON1 || iButton == LGLCDBUTTON_DOWN) { + m_MessageText.ScrollDown(); + } else if(iButton == LGLCDBUTTON_BUTTON0 || iButton == LGLCDBUTTON_UP) { + m_MessageText.ScrollUp(); + } + SetExpiration(CConfig::GetIntSetting(NOTIFY_DURATION)*1000); + } +} + +//************************************************************************ +// Called when an LCD-button is released +//************************************************************************ +void CNotificationScreen::OnLCDButtonUp(int iButton) +{ + +} + +//************************************************************************ +// Called when the screen is activated +//************************************************************************ +void CNotificationScreen::OnActivation() +{ + +} + +//************************************************************************ +// Called when the screen is deactivated +//************************************************************************ +void CNotificationScreen::OnDeactivation() +{ +} + +//************************************************************************ +// Called when the screen has expired +//************************************************************************ +void CNotificationScreen::OnExpiration() +{ + // clear the cached events + CNotificationEntry *pEntry = NULL; + while(!m_LNotifications.empty()) + { + pEntry = *(m_LNotifications.begin()); + m_LNotifications.pop_front(); + delete pEntry; + } + // reset the object's content + m_EventText.SetText(_T("")); + m_MessageText.SetText(_T("")); + + m_pEntry = NULL; +} \ No newline at end of file -- cgit v1.2.3