277 lines
8.2 KiB
C++
277 lines
8.2 KiB
C++
#include "SMSGui.h"
|
|
#include "ui_SMSGui.h"
|
|
#include <QScrollBar>
|
|
#include "SMSClient.h"
|
|
#include <QKeyEvent>
|
|
|
|
CSMSGui::CSMSGui(QWidget *parent) :
|
|
QWidget(parent)
|
|
|
|
{
|
|
setupUi(this);
|
|
mSMSDatabase = 0;
|
|
mSelectedConversation = 0;
|
|
mProgramHandle = 0;
|
|
mCharCounter = 160;
|
|
mMsgCounter = 0;
|
|
|
|
mSMSMessageStatsLabel->setText(QString().sprintf("Nombre de caractères du message %d/160\nNombre de messages à envoyer: %d msg",mCharCounter,mMsgCounter+1));
|
|
|
|
// connect(mContactsTreeWidget,SIGNAL(itemActivated(QTreeWidgetItem*,int)),this,SLOT(ConversationSelected(QTreeWidgetItem*,int)));
|
|
connect(mContactsTreeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)),this,SLOT(ConversationClicked(QTreeWidgetItem*,int)));
|
|
connect(mSMSSendBtn,SIGNAL(clicked(bool)),this,SLOT(SendMsgBtnClicked(bool)));
|
|
connect(mSMSEdit,SIGNAL(textChanged()),this,SLOT(SMSEditZoneContentsChanged()));
|
|
|
|
mSMSEdit->installEventFilter(this);
|
|
}
|
|
|
|
CSMSGui::~CSMSGui()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
int CSMSGui::FullConversationsUpdate()
|
|
{
|
|
QList<CSMSConversation*> *ConversationsList = mSMSDatabase->GetConversations();
|
|
|
|
mContactsTreeWidget->clear();
|
|
mContactsTreeWidget->setColumnCount(3);
|
|
mContactsTreeWidget->setIconSize(QSize(25,25));
|
|
|
|
|
|
|
|
for(int i = 0; i < ConversationsList->size(); i++)
|
|
{
|
|
QFont NewMsgFont;
|
|
NewMsgFont.setBold(true);
|
|
|
|
QTreeWidgetItem *NewContact = new QTreeWidgetItem(mContactsTreeWidget);
|
|
CSMSConversation *Conversation = ConversationsList->at(i);
|
|
CSMSMessage *LastMsg = Conversation->GetMostRecentMessage();
|
|
NewContact->setIcon(0,QIcon(Conversation->GetConversationContact()->mContactPicture));
|
|
if(LastMsg->mIsRead == false)
|
|
{
|
|
NewContact->setFont(1,NewMsgFont);
|
|
NewContact->setFont(2,NewMsgFont);
|
|
}
|
|
NewContact->setText(1,Conversation->GetConversationContact()->mContactName);
|
|
NewContact->setText(2,Conversation->GetConversationContact()->mContactNumber);
|
|
// QVariant data = QVariant::fromValue((void*)Conversation);
|
|
NewContact->setData(0,Qt::UserRole,QVariant::fromValue((void*)Conversation));
|
|
mContactsTreeWidget->insertTopLevelItem(0,NewContact);
|
|
}
|
|
|
|
mContactsTreeWidget->resizeColumnToContents(0);
|
|
mContactsTreeWidget->resizeColumnToContents(1);
|
|
mContactsTreeWidget->resizeColumnToContents(2);
|
|
mContactsTreeWidget->topLevelItem(0)->setSelected(true);
|
|
ConversationClicked(mContactsTreeWidget->topLevelItem(0),0);
|
|
|
|
|
|
// mContactsTreeWidget->addTopLevelItem(QTreeWidget());
|
|
return RET_OK;
|
|
}
|
|
|
|
void CSMSGui::ConversationClicked(QTreeWidgetItem *item, int column)
|
|
{
|
|
//qDebug("Clicked %d",column);
|
|
mSelectedConversation = (CSMSConversation*) item->data(0,Qt::UserRole).value<void*>();
|
|
QString MessageText;
|
|
MessageText.clear();
|
|
|
|
mConversationText->clear();
|
|
|
|
// for(int i = 0; i < Conversation->GetMessages()->size(); i++)
|
|
for(int i = mSelectedConversation->GetMessages()->size()-1; i >=0; i--)
|
|
{
|
|
MessageText.append(mSelectedConversation->GetMessages()->at(i)->mDateTime.toString("yyyy/MM/dd hh:mm - "));
|
|
|
|
if(mSelectedConversation->GetMessages()->at(i)->mType == SMS_SENT_TYPE)
|
|
{
|
|
MessageText.append("YOU: ");
|
|
}
|
|
else
|
|
{
|
|
MessageText.append(mSelectedConversation->GetConversationContact()->mContactName);
|
|
MessageText.append(": ");
|
|
}
|
|
MessageText.append(mSelectedConversation->GetMessages()->at(i)->mMessageText);
|
|
MessageText.append("\n\r");
|
|
}
|
|
|
|
mConversationText->setText(MessageText);
|
|
|
|
QFont font;
|
|
font.setBold(false);
|
|
item->setFont(0,font);
|
|
item->setFont(1,font);
|
|
item->setFont(2,font);
|
|
|
|
QTextCursor cursor( mConversationText->textCursor() );
|
|
cursor.movePosition( QTextCursor::End );
|
|
|
|
QScrollBar *bar = mConversationText->verticalScrollBar();
|
|
if( bar )
|
|
{
|
|
if( !bar->isSliderDown() )
|
|
bar->setValue( bar->maximum() );
|
|
}
|
|
else
|
|
mConversationText->ensureCursorVisible();
|
|
|
|
mContactPic->setPixmap(mSelectedConversation->GetConversationContact()->mContactPicture.scaled(mContactPic->size()));
|
|
font.setPointSize(26);
|
|
mContactName->setFont(font);
|
|
mContactName->setText(mSelectedConversation->GetConversationContact()->mContactName);
|
|
|
|
mSMSDatabase->SetConversationAsRead(mSelectedConversation);
|
|
|
|
|
|
}
|
|
|
|
int CSMSGui::UpdateDisplayedConversation(int MessageIndex)
|
|
{
|
|
if(MessageIndex != -1)
|
|
{
|
|
QString MessageText;
|
|
MessageText = mConversationText->toPlainText();
|
|
|
|
MessageText.append(mSelectedConversation->GetMessages()->at(MessageIndex)->mDateTime.toString("yyyy/MM/dd hh:mm - "));
|
|
|
|
if(mSelectedConversation->GetMessages()->at(MessageIndex)->mType == SMS_SENT_TYPE)
|
|
{
|
|
MessageText.append("YOU: ");
|
|
}
|
|
else
|
|
{
|
|
MessageText.append(mSelectedConversation->GetMessages()->at(MessageIndex)->mContact);
|
|
MessageText.append(": ");
|
|
}
|
|
MessageText.append(mSelectedConversation->GetMessages()->at(MessageIndex)->mMessageText);
|
|
MessageText.append("\n\r");
|
|
|
|
mConversationText->setText(MessageText);
|
|
}
|
|
|
|
|
|
|
|
QTextCursor cursor( mConversationText->textCursor() );
|
|
cursor.movePosition( QTextCursor::End );
|
|
|
|
QScrollBar *bar = mConversationText->verticalScrollBar();
|
|
if( bar )
|
|
{
|
|
if( !bar->isSliderDown() )
|
|
bar->setValue( bar->maximum() );
|
|
}
|
|
else
|
|
mConversationText->ensureCursorVisible();
|
|
|
|
return RET_OK;
|
|
|
|
}
|
|
|
|
//void CSMSGui::ConversationSelected(QTreeWidgetItem *item, int column)
|
|
//{
|
|
// // qDebug("Selected, %d",column);
|
|
//}
|
|
|
|
int CSMSGui::NewMessageNotification(CSMSConversation *Conversation, int MessageIndex)
|
|
{
|
|
if(Conversation == 0)
|
|
{
|
|
return NEW_MSG_ERROR_STATUS;
|
|
}
|
|
if(mSelectedConversation == Conversation) //the new msg comes from the currently displayed contact conversation
|
|
{
|
|
UpdateDisplayedConversation(MessageIndex);
|
|
mSMSDatabase->SetConversationAsRead(mSelectedConversation);
|
|
return NEW_MSG_READ_STATUS;
|
|
}
|
|
|
|
//Find conversation...
|
|
for(int i = 0; i < mContactsTreeWidget->topLevelItemCount(); i++)
|
|
{
|
|
void *data = mContactsTreeWidget->topLevelItem(i)->data(0,Qt::UserRole).value<void*>();
|
|
if((CSMSConversation*)data == Conversation)
|
|
{
|
|
//found it!
|
|
QFont font;
|
|
font.setBold(true);
|
|
mContactsTreeWidget->topLevelItem(i)->setFont(0,font);
|
|
mContactsTreeWidget->topLevelItem(i)->setFont(1,font);
|
|
mContactsTreeWidget->topLevelItem(i)->setFont(2,font);
|
|
return NEW_MSG_UNREAD_STATUS;
|
|
}
|
|
}
|
|
return NEW_MSG_ERROR_STATUS;
|
|
}
|
|
|
|
int CSMSGui::SendEditMessage()
|
|
{
|
|
if(mSelectedConversation == 0)
|
|
{
|
|
return RET_ERROR;
|
|
}
|
|
|
|
QString MsgTxt = mSMSEdit->toPlainText();
|
|
|
|
if(MsgTxt.isEmpty())
|
|
{
|
|
return RET_ERROR;
|
|
}
|
|
|
|
CSMSMessage Message;
|
|
Message.mContact = mSelectedConversation->mConversationContact.mRAWContactNbr;
|
|
Message.mDID = mSMSDatabase->GetDID();
|
|
Message.mMessageText = MsgTxt;
|
|
|
|
mProgramHandle->SendSMSMessage(Message);
|
|
mSMSEdit->clear();
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
void CSMSGui::SendMsgBtnClicked(bool checked)
|
|
{
|
|
Q_UNUSED(checked)
|
|
SendEditMessage();
|
|
}
|
|
|
|
bool CSMSGui::eventFilter(QObject *obj, QEvent *event)
|
|
{
|
|
if (event->type() == QEvent::KeyPress)
|
|
{
|
|
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
|
|
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return)
|
|
{
|
|
// qDebug("Ate key press %d", keyEvent->key());
|
|
SendEditMessage();
|
|
return true;
|
|
}
|
|
// qDebug("Key press %d", keyEvent->key());
|
|
|
|
}
|
|
|
|
// standard event processing
|
|
return QObject::eventFilter(obj, event);
|
|
}
|
|
|
|
void CSMSGui::SMSEditZoneContentsChanged()
|
|
{
|
|
int CurStringCharCount = mSMSEdit->toPlainText().size();
|
|
if(CurStringCharCount <= 160)
|
|
{
|
|
mCharCounter = 160-CurStringCharCount;
|
|
mMsgCounter = 0;
|
|
}
|
|
else
|
|
{
|
|
mMsgCounter = (int)(CurStringCharCount / 160);
|
|
mCharCounter = 160 - (CurStringCharCount - (mMsgCounter*160));
|
|
}
|
|
mSMSMessageStatsLabel->setText(QString().sprintf("Nombre de caractères du message %d/160\nNombre de messages à envoyer: %d msg",mCharCounter,mMsgCounter+1));
|
|
|
|
}
|