Chat-O-Matic/application/Contact.cpp

112 lines
2.0 KiB
C++
Raw Normal View History

/*
2011-12-03 16:38:03 -06:00
* Copyright 2009-2011, Andrea Anzani. All rights reserved.
* Copyright 2012, Dario Casalinuovo. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Andrea Anzani, andrea.anzani@gmail.com
* Dario Casalinuovo
*/
2021-05-23 14:39:07 -05:00
#include "Contact.h"
#include "CayaPreferences.h"
#include "ChatWindow.h"
#include "RosterItem.h"
#include "WindowsManager.h"
2021-05-23 14:39:07 -05:00
Contact::Contact(BString id, BMessenger msgn)
2010-05-19 17:28:26 -05:00
:
User::User(id, msgn),
2010-05-19 17:28:26 -05:00
fChatWindow(NULL),
fNewWindow(true)
{
fRosterItem = new RosterItem(id.String(), this);
RegisterObserver(fRosterItem);
}
ChatWindow*
2021-05-23 14:39:07 -05:00
Contact::GetChatWindow()
{
if (fChatWindow == NULL)
_CreateChatWindow();
return fChatWindow;
}
void
2021-05-23 14:39:07 -05:00
Contact::DeleteWindow()
{
if (fChatWindow != NULL) {
if (fChatWindow->Lock()) {
UnregisterObserver(fChatWindow);
fChatWindow->Quit();
fChatWindow = NULL;
fNewWindow = true;
}
}
}
void
2021-05-23 14:39:07 -05:00
Contact::ShowWindow(bool typing, bool userAction)
{
if (fChatWindow == NULL)
_CreateChatWindow();
fChatWindow->AvoidFocus(true);
if (CayaPreferences::Item()->MoveToCurrentWorkspace)
fChatWindow->SetWorkspaces(B_CURRENT_WORKSPACE);
if (fNewWindow || userAction) {
fChatWindow->AvoidFocus(false);
fChatWindow->ShowWindow();
fNewWindow = false;
} else {
if (typing) {
if (CayaPreferences::Item()->RaiseUserIsTyping)
fChatWindow->ShowWindow();
} else {
if (CayaPreferences::Item()->RaiseOnMessageReceived
|| fChatWindow->IsHidden())
fChatWindow->ShowWindow();
}
}
fChatWindow->AvoidFocus(false);
}
void
2021-05-23 14:39:07 -05:00
Contact::HideWindow()
{
if ((fChatWindow != NULL) && !fChatWindow->IsHidden())
fChatWindow->Hide();
}
RosterItem*
2021-05-23 14:39:07 -05:00
Contact::GetRosterItem() const
{
return fRosterItem;
}
void
2021-05-23 14:39:07 -05:00
Contact::SetNotifyAvatarBitmap(BBitmap* bitmap)
{
User::SetNotifyAvatarBitmap(bitmap);
if (fAvatarBitmap != NULL && fChatWindow != NULL)
fChatWindow->UpdateAvatar();
}
void
Contact::_CreateChatWindow()
{
fChatWindow = new ChatWindow(this);
WindowsManager::Get()->RelocateWindow(fChatWindow);
RegisterObserver(fChatWindow);
}