From 9f5b83c77674c0ca9eb534986c504944f8227ef1 Mon Sep 17 00:00:00 2001 From: J-F Martel Date: Wed, 12 Apr 2017 13:37:09 -0400 Subject: [PATCH] Creation --- .gitignore | 10 + Configuration/Settings.mcs | Bin 0 -> 122 bytes Ico/back.png | Bin 0 -> 47108 bytes Ico/close.png | Bin 0 -> 7545 bytes Ico/contact.png | Bin 0 -> 13276 bytes Ico/icon.png | Bin 0 -> 67051 bytes Ico/sms.png | Bin 0 -> 55203 bytes Ico/sms_new.png | Bin 0 -> 34234 bytes SMSGui.ui | 136 +++++++ Sources/AbstractNetworkInterface.h | 10 + Sources/GlobalDefine.h | 9 + Sources/GuiMain.cpp | 45 +++ Sources/GuiMain.h | 28 ++ Sources/MasterCtrlInterface.cpp | 96 +++++ Sources/MasterCtrlInterface.h | 39 ++ Sources/NetworkProtocol.cpp | 379 +++++++++++++++++++ Sources/NetworkProtocol.h | 92 +++++ Sources/ProgramSettings.cpp | 146 +++++++ Sources/ProgramSettings.h | 54 +++ Sources/ProtocolDefs.h | 186 +++++++++ Sources/SMSClient/Contact.cpp | 107 ++++++ Sources/SMSClient/Contact.h | 29 ++ Sources/SMSClient/ContactRepository.cpp | 168 ++++++++ Sources/SMSClient/ContactRepository.h | 27 ++ Sources/SMSClient/SMSClient.cpp | 198 ++++++++++ Sources/SMSClient/SMSClient.h | 77 ++++ Sources/SMSClient/SMSConversation.cpp | 61 +++ Sources/SMSClient/SMSConversation.h | 27 ++ Sources/SMSClient/SMSDatabase.cpp | 204 ++++++++++ Sources/SMSClient/SMSDatabase.h | 52 +++ Sources/SMSClient/SMSGui.cpp | 276 ++++++++++++++ Sources/SMSClient/SMSGui.h | 49 +++ Sources/SMSClient/SMSMasterCtrlInterface.cpp | 291 ++++++++++++++ Sources/SMSClient/SMSMasterCtrlInterface.h | 47 +++ Sources/SMSClient/SMSMessage.cpp | 63 +++ Sources/SMSClient/SMSMessage.h | 44 +++ Sources/SettingsWindow.cpp | 147 +++++++ Sources/SettingsWindow.h | 44 +++ Sources/Sprinkler/SprinklerGui.cpp | 13 + Sources/Sprinkler/SprinklerGui.h | 23 ++ Sources/Sprinkler/SprinklerGui.ui | 32 ++ Sources/SystemGui.cpp | 62 +++ Sources/SystemGui.h | 37 ++ Sources/SystemTrayManager.cpp | 96 +++++ Sources/SystemTrayManager.h | 32 ++ Sources/main.cpp | 15 + SystemGui.pro | 67 ++++ ui_SMSGui.h | 120 ++++++ ui_SprinklerGui.h | 55 +++ 49 files changed, 3693 insertions(+) create mode 100644 .gitignore create mode 100644 Configuration/Settings.mcs create mode 100644 Ico/back.png create mode 100644 Ico/close.png create mode 100644 Ico/contact.png create mode 100644 Ico/icon.png create mode 100644 Ico/sms.png create mode 100644 Ico/sms_new.png create mode 100644 SMSGui.ui create mode 100644 Sources/AbstractNetworkInterface.h create mode 100644 Sources/GlobalDefine.h create mode 100644 Sources/GuiMain.cpp create mode 100644 Sources/GuiMain.h create mode 100644 Sources/MasterCtrlInterface.cpp create mode 100644 Sources/MasterCtrlInterface.h create mode 100644 Sources/NetworkProtocol.cpp create mode 100644 Sources/NetworkProtocol.h create mode 100644 Sources/ProgramSettings.cpp create mode 100644 Sources/ProgramSettings.h create mode 100644 Sources/ProtocolDefs.h create mode 100644 Sources/SMSClient/Contact.cpp create mode 100644 Sources/SMSClient/Contact.h create mode 100644 Sources/SMSClient/ContactRepository.cpp create mode 100644 Sources/SMSClient/ContactRepository.h create mode 100644 Sources/SMSClient/SMSClient.cpp create mode 100644 Sources/SMSClient/SMSClient.h create mode 100644 Sources/SMSClient/SMSConversation.cpp create mode 100644 Sources/SMSClient/SMSConversation.h create mode 100644 Sources/SMSClient/SMSDatabase.cpp create mode 100644 Sources/SMSClient/SMSDatabase.h create mode 100644 Sources/SMSClient/SMSGui.cpp create mode 100644 Sources/SMSClient/SMSGui.h create mode 100644 Sources/SMSClient/SMSMasterCtrlInterface.cpp create mode 100644 Sources/SMSClient/SMSMasterCtrlInterface.h create mode 100644 Sources/SMSClient/SMSMessage.cpp create mode 100644 Sources/SMSClient/SMSMessage.h create mode 100644 Sources/SettingsWindow.cpp create mode 100644 Sources/SettingsWindow.h create mode 100644 Sources/Sprinkler/SprinklerGui.cpp create mode 100644 Sources/Sprinkler/SprinklerGui.h create mode 100644 Sources/Sprinkler/SprinklerGui.ui create mode 100644 Sources/SystemGui.cpp create mode 100644 Sources/SystemGui.h create mode 100644 Sources/SystemTrayManager.cpp create mode 100644 Sources/SystemTrayManager.h create mode 100644 Sources/main.cpp create mode 100644 SystemGui.pro create mode 100644 ui_SMSGui.h create mode 100644 ui_SprinklerGui.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9f1bd8f --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/SystemGui.pro.user +/Makefile +/Makefile.Debug +/Makefile.Release +/object_script.MasterInterface.Debug +/object_script.MasterInterface.Release +/object_script.SystemGui.Debug +/object_script.SystemGui.Release +/debug +/release diff --git a/Configuration/Settings.mcs b/Configuration/Settings.mcs new file mode 100644 index 0000000000000000000000000000000000000000..1445910fe534bf301e1428ba6ad182f025a0369e GIT binary patch literal 122 zcmW-X%MCzK6hu!67Fw_*{!3AU7G8ve_=RU-qazI{K~Z92G51c+ocnrSz$GIhB_StN yQY8_0sA!n5bnJ}8V&I*-Zb7fjX!U7X|5h{0+z8|vF)L%BWDy@YM6G^6jrjmA5*6A2 literal 0 HcmV?d00001 diff --git a/Ico/back.png b/Ico/back.png new file mode 100644 index 0000000000000000000000000000000000000000..48998cce045229f712505634010a74a4ae959095 GIT binary patch literal 47108 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 toVapv+2#^!;5#Msb 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

Kq`YfR2JEdYnBPg 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 literal 0 HcmV?d00001 diff --git a/Ico/sms.png b/Ico/sms.png new file mode 100644 index 0000000000000000000000000000000000000000..e35e35a4fc967d49ea0f508dd21184436fa95dce GIT binary patch literal 55203 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 literal 0 HcmV?d00001 diff --git a/Ico/sms_new.png b/Ico/sms_new.png new file mode 100644 index 0000000000000000000000000000000000000000..fe263531178fa3ae1a07a1fb49cc8c2154208dfe GIT binary patch literal 34234 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 + + CSMSGui + + + + 0 + 0 + 803 + 785 + + + + + 0 + 0 + + + + Form + + + + + 0 + 160 + 481 + 451 + + + + + + + 0 + 620 + 521 + 121 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + Send + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 200 + 75 + + + + TextLabel + + + + + + + + + 520 + 160 + 256 + 471 + + + + 2 + + + false + + + + 1 + + + + + + + 10 + 10 + 141 + 121 + + + + TextLabel + + + + + + 180 + 20 + 591 + 101 + + + + TextLabel + + + + + + diff --git a/Sources/AbstractNetworkInterface.h b/Sources/AbstractNetworkInterface.h new file mode 100644 index 0000000..75ee027 --- /dev/null +++ b/Sources/AbstractNetworkInterface.h @@ -0,0 +1,10 @@ +#ifndef ABSTRACTNETWORKINTERFACE_H +#define ABSTRACTNETWORKINTERFACE_H +#include + +class CAbstractNetworkCommIF +{ +public: + virtual int NewFrameReceived(QByteArray Frame) = 0; +}; +#endif // ABSTRACTNETWORKINTERFACE_H diff --git a/Sources/GlobalDefine.h b/Sources/GlobalDefine.h new file mode 100644 index 0000000..670535f --- /dev/null +++ b/Sources/GlobalDefine.h @@ -0,0 +1,9 @@ +#ifndef GLOBALDEFINE_H +#define GLOBALDEFINE_H + +#include "QDebug" + +#define RET_OK 1 +#define RET_ERROR 0 + +#endif // GLOBALDEFINE_H diff --git a/Sources/GuiMain.cpp b/Sources/GuiMain.cpp new file mode 100644 index 0000000..448162d --- /dev/null +++ b/Sources/GuiMain.cpp @@ -0,0 +1,45 @@ +#include "GuiMain.h" +#include + +CGuiMain::CGuiMain(QWidget *parent) + : QMainWindow(parent) +{ + mSMSGui = new CSMSGui(this); + mSprinklerGui = new CSprinklerGui(this); + mMainTabWidget = new QTabWidget(this); + setCentralWidget(mMainTabWidget); + mMainTabWidget->addTab(mSMSGui,"SMS"); + mMainTabWidget->addTab(mSprinklerGui,"Sprinkler"); + resize(1024,768); +} + +CGuiMain::~CGuiMain() +{ + // delete mSMSGui; +} + +int CGuiMain::RespawnMainWindow() +{ + // qDebug("Respawn"); + activateWindow(); + showNormal(); + raise(); + return RET_OK; +} + +void CGuiMain::changeEvent(QEvent *event) +{ + // qDebug("State Changed"); + if (event->type() == QEvent::WindowStateChange) + { + // qDebug("Window state"); + QWindowStateChangeEvent* WinEvent = (QWindowStateChangeEvent*)event; + if(window()->isMinimized() && ((WinEvent->oldState() != Qt::WindowMinimized))) + { + qDebug("Minimized"); + + hide(); + } + + } +} diff --git a/Sources/GuiMain.h b/Sources/GuiMain.h new file mode 100644 index 0000000..090df0d --- /dev/null +++ b/Sources/GuiMain.h @@ -0,0 +1,28 @@ +#ifndef GUIMAIN_H +#define GUIMAIN_H + +#include +#include +#include "SMSGui.h" +#include +#include "SprinklerGui.h" + +class CGuiMain : public QMainWindow +{ + Q_OBJECT + +public: + CGuiMain(QWidget *parent = 0); + ~CGuiMain(); + + CSMSGui *mSMSGui; + CSprinklerGui *mSprinklerGui; + QTabWidget *mMainTabWidget; + int RespawnMainWindow(); + int HideMainWindow(); + + virtual void changeEvent(QEvent* event); + +}; + +#endif // GUIMAIN_H diff --git a/Sources/MasterCtrlInterface.cpp b/Sources/MasterCtrlInterface.cpp new file mode 100644 index 0000000..baadc00 --- /dev/null +++ b/Sources/MasterCtrlInterface.cpp @@ -0,0 +1,96 @@ +#include "MasterCtrlInterface.h" + +CMasterCtrlInterface::CMasterCtrlInterface() +{ + +} + +int CMasterCtrlInterface::ConnectToMasterCtrl() +{ + if(mNetworkCommSocket == 0) + { + mNetworkCommSocket = new QTcpSocket(); + } + connect(mNetworkCommSocket,SIGNAL(connected()),this,SLOT(NetworkSocketConnected())); + connect(mNetworkCommSocket,SIGNAL(disconnected()),this,SLOT(NetworkSocketDisconnected())); + connect(mNetworkCommSocket,SIGNAL(readyRead()),this,SLOT(NetworkSocketDataAvailable())); + + mNetworkCommSocket->connectToHost(mMasterCtrlAddress,mNetworkPort); + + return RET_OK; +} + +int CMasterCtrlInterface::DisconnectMasterCtrl() +{ + if(mNetworkCommSocket != 0) + { + mNetworkCommSocket->close(); + // mNetworkCommSocket->deleteLater(); + } + + return RET_OK; +} + +int CMasterCtrlInterface::NewFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data) +{ + + if(TargetDeviceID == ID_ETHERNET_VIRTUAL) + { + switch(MessageID) + { + case ETH_NETWK_DEVICE_INFO_REQUEST: + { + QByteArray Frame,ResponseData; + ResponseData.append((char)mMyDeviceID); + ResponseData.append((char)mDeviceAddress); + Frame = GetTxPacket(ETH_NETWK_DEVICE_INFO_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_ETHERNET_VIRTUAL,mDeviceAddress); + mNetworkCommSocket->write(Frame); + break; + } + case ETH_NETWK_CONNECTION_REFUSED: + { + qDebug("MasterCtrl connection refused"); + mNetworkCommSocket->close(); + delete mNetworkCommSocket; + mNetworkCommSocket = 0; + break; + } + case ETH_NETWK_SET_DEVICE_INFO_ACK: + { +// mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_DID_INFO_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress)); + DeviceConnectedToMaster(); + qDebug("MasterCtrl accepted connection"); + break; + } + case ETH_NETWK_DEVICE_INFO_RESPONSE: + default: + { + break; + } + + } + } + else + { + DeviceFrameReceived(TargetDeviceID, TargetDeviceAddress, SenderID, SenderAddress, MessageID, DataSize, Data); + } + + return RET_OK; +} + +void CMasterCtrlInterface::NetworkSocketConnected() +{ + qDebug("Connected to MasterCtrl"); + +} + +void CMasterCtrlInterface::NetworkSocketDataAvailable() +{ + AnalyzeRxBuffer(mNetworkCommSocket->readAll()); +} + +void CMasterCtrlInterface::NetworkSocketDisconnected() +{ + qDebug("Disconnected from MasterCtrl"); + +} diff --git a/Sources/MasterCtrlInterface.h b/Sources/MasterCtrlInterface.h new file mode 100644 index 0000000..3796a26 --- /dev/null +++ b/Sources/MasterCtrlInterface.h @@ -0,0 +1,39 @@ +#ifndef MASTERCTRLINTERFACE_H +#define MASTERCTRLINTERFACE_H +#include +#include "NetworkProtocol.h" +#include "GlobalDefine.h" +#include "ProtocolDefs.h" +#include +#include "SMSMessage.h" + +class CMasterCtrlInterface : public QObject, public CNetworkProtocol +{ + Q_OBJECT + +public: + CMasterCtrlInterface(); + + + QTcpSocket *mNetworkCommSocket; + int mDeviceAddress; + int mNetworkPort; + QString mMasterCtrlAddress; + int mMyDeviceID; + + int ConnectToMasterCtrl(); + int DisconnectMasterCtrl(); + virtual int NewFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data); + + virtual int DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data) = 0; + virtual int DeviceConnectedToMaster(bool Connected = true) = 0; + + +public slots: + void NetworkSocketConnected(); + void NetworkSocketDataAvailable(); + void NetworkSocketDisconnected(); + +}; + +#endif // MASTERCTRLINTERFACE_H diff --git a/Sources/NetworkProtocol.cpp b/Sources/NetworkProtocol.cpp new file mode 100644 index 0000000..30d40a7 --- /dev/null +++ b/Sources/NetworkProtocol.cpp @@ -0,0 +1,379 @@ + + +#include "NetworkProtocol.h" + + +CNetworkProtocol::CNetworkProtocol() +{ + mIsResetManual = false; + ResetRxStateMachine(); + +} + +CNetworkProtocol::~CNetworkProtocol() +{ + +} + +//void CNetworkProtocol::BindUpperLayer(CMasterCtrl *UpperLayerPtr) +//{ +// mMasterCtrlHandle = UpperLayerPtr; +//} + + +unsigned char CNetworkProtocol::CalcCRC(char *Buffer, int Size) +{ + unsigned char CRC = 0x00; + + for( int i = 0; i < Size; i++) + { + CRC ^= Buffer[i]; + } + return CRC; +} + +QByteArray CNetworkProtocol::GetTxPacket(unsigned char MessageID, unsigned char Flags, const char *Data, int Size, unsigned char Address, unsigned char ID, unsigned char SenderDevice, unsigned char SenderAddress) +{ +#ifdef USE_BYTEARRAY_IN_SEND + + QByteArray Frame; + Frame.clear(); + int FrameSize = Size + 11; //Add header data... + + Frame.append(FRAME_HEADER); //header + Frame.append(SenderAddress); //Device address (default = MasterCtrl) + Frame.append(SenderDevice); //Device ID (default = MasterCtrl + Frame.append(ID); //destination ID + Frame.append(Address); //Destination Address + Frame.append(Flags); + Frame.append(MessageID); //Cmd + Frame.append((Size & 0xFF000000) >> 24); + Frame.append((Size & 0x00FF0000) >> 16); + Frame.append((Size & 0x0000FF00) >> 8); + Frame.append(Size & 0x000000FF); + Frame.append(Data,Size); + char CRC = CalcCRC(Frame.data(),FrameSize); + Frame.append(CRC); + + return Frame; + + +#else + int toto; + char temp; + char OutBuffer[MAX_MESSAGE_SIZE+10]; + + int FrameSize = Size + 9; //Add header data... + + OutBuffer[0] = (char)FRAME_HEADER; //header + OutBuffer[1] = SenderAddress; //Device address (default = MasterCtrl) + OutBuffer[2] = SenderDevice; //Device ID (default = MasterCtrl + OutBuffer[3] = (char)ID; //destination ID + OutBuffer[4] = (char)Address; //Destination Address + OutBuffer[5] = (char)Flags; + OutBuffer[6] = (char)MessageID; //Cmd + // toto = FrameSize & 0xFF00; + temp = FrameSize >> 8; + OutBuffer[7] = ((FrameSize - 9) & 0xFF00) >> 8; + OutBuffer[8] = (FrameSize - 9) & 0x00FF; + + for(int i = 0; i < Size; i++) + { + temp = Data[i]; + OutBuffer[i+9] = temp; + } + + OutBuffer[FrameSize] = CalcCRC(OutBuffer,FrameSize); + + +// CSerialComm::instance()->WriteData(&OutBuffer[0],FrameSize+1); + + return QByteArray(OutBuffer,FrameSize); +#endif +} + +//int CNetworkProtocol::TxData(unsigned char MessageID,unsigned char Flags,unsigned char *Data,int Size, unsigned char Address,unsigned char ID) +//{ + +// int toto; +// char temp; +// char OutBuffer[MAX_MESSAGE_SIZE+10]; + +// int FrameSize = Size + 9; //Add header data... + +// OutBuffer[0] = (char)FRAME_HEADER; //header +// OutBuffer[1] = 1; //MasterCtrl address +// OutBuffer[2] = ID_MASTER; //MasterCtrl ID +// OutBuffer[3] = (char)ID; //destination ID +// OutBuffer[4] = (char)Address; //Destination Address +// OutBuffer[5] = (char)Flags; +// OutBuffer[6] = (char)MessageID; //Cmd +// toto = FrameSize & 0xFF00; +// temp = FrameSize >> 8; +// OutBuffer[7] = ((FrameSize - 9) & 0xFF00) >> 8; +// OutBuffer[8] = (FrameSize - 9) & 0x00FF; + +// for(int i = 0; i < Size; i++) +// { +// temp = Data[i]; +// OutBuffer[i+9] = temp; +// } + +// OutBuffer[FrameSize] = CalcCRC(OutBuffer,FrameSize); + + +//// CSerialComm::instance()->WriteData(&OutBuffer[0],FrameSize+1); + +// return 0; +//} + +//void CNetworkProtocol::ReadPort(void) +//{ +// int Size = 0; +// RxBuff = CSerialComm::instance()->ReceiveData(Size); +// if(Size) +// { +// if(Size > 50) +// { +// int toto = 5; +// } +//// TRACE("Received %d bytes\n",Size); +// AnalyseNewData(RxBuff,Size); + +// } +//} + +//void CNetworkProtocol::AnalyseNewData(char *Data, int size) +//{ +// if(size != 0) +// { +// for(int i(0); i < size; i++) +// { +// StateMachine((unsigned char)Data[i]); +// } +// } +//} + +int CNetworkProtocol::RxStateMachine(unsigned char Data) +{ + int ret = PROTOCOL_RET_OK_PACKET_INCOMPLETE; + + switch(RxState) + { + case RxHeader: //Wait for data header... + { + if((unsigned char)Data == FRAME_HEADER) + { + mRxData[BufPtr++] = Data; + RxState = RxAdd; + CRC ^= Data; + } + else + { + ResetRxStateMachine(); + ret = PROTOCOL_RET_OK_BAD_HEADER; + } + + break; + } + case RxAdd: //Sender Address. + { + SenderAddress = Data; + mRxData[BufPtr++] = Data; + RxState = RxID; + CRC ^= Data; + break; + } + case RxID: //Sender ID + { + mRxData[BufPtr++] = Data; + RxState = RxMyID; + SenderID = Data; + CRC ^= Data; + break; + } + case RxMyID: + { + +// if(Data != ID_MASTER && Data != 0xFF) //Message is not for Master and it's not a broadcast +// { +// ResetRxStateMachine(); +// ret = PROTOCOL_RET_ERROR_INVALID_TARGET_DEVICE; + +// break; +// } + TargetDeviceID = Data; + mRxData[BufPtr++] = Data; + RxState = RxMyAddress; + CRC ^= Data; + break; + } + case RxMyAddress: + { +// if(Data != 1 && Data != 0xFF) //Message is not for us and it's not a broadcast +// { +// ResetRxStateMachine(); +// ret = PROTOCOL_RET_ERROR_INVALID_TARGET_ADDRESS; + +// break; +// } + TargetAddress = Data; + mRxData[BufPtr++] = Data; + RxState = RxFlags; + CRC ^= Data; + break; + } + case RxFlags: + { + Flags = Data; + mRxData[BufPtr++] = Data; + RxState = RxCMD; + CRC ^= Data; + break; + } + case RxCMD: + { + RxCmd = Data; + mRxData[BufPtr++] = Data; + RxState = RxSize1; + CRC ^= Data; + break; + } + case RxSize1: //Data size MSB + { + RxSize = 0; + RxSize = (unsigned int)Data; + RxSize <<= 8; + mRxData[BufPtr++] = Data; + + + RxState = RxSize2; + CRC ^= Data; + break; + } + case RxSize2: //Data size MSB + { + RxSize |= (unsigned int)Data; + RxSize <<= 8; + mRxData[BufPtr++] = Data; + + + RxState = RxSize3; + CRC ^= Data; + break; + } + case RxSize3: //Data size MSB + { + RxSize |= (unsigned int)Data; + RxSize <<= 8; + mRxData[BufPtr++] = Data; + + + RxState = RxSize4; + CRC ^= Data; + break; + } + case RxSize4: //Data size LSB + { + RxSize |= (unsigned int)Data; + mRxData[BufPtr++] = Data; + + if(RxSize == 0) + RxState = RxCRC; + else + RxState = RxData; + + CRC ^= Data; + break; + } + + case RxData: + { + //mRxData[BufPtr++] = Data; + mDataBuffer.append(Data); + CRC ^= Data; + DataCnt++; + + if(DataCnt == RxSize) + RxState = RxCRC; + + break; + } + case RxCRC: + { + if(Data != CRC) //Data corruption + { + ResetRxStateMachine(); + ret = PROTOCOL_RET_ERROR_BAD_CRC; + + break; + } + + // mDataBuffer = QByteArray(&mRxData[DATA_START],RxSize); + NewFrameReceived(TargetDeviceID,TargetAddress,SenderID,SenderAddress,RxCmd,RxSize,mDataBuffer); + ret = PROTOCOL_RET_OK_PACKET_COMPLETE; + if(mIsResetManual == false) + { + ResetRxStateMachine(); + } + break; + } + default: + { + ret = PROTOCOL_RET_ERROR_SM_LOGIC; + ResetRxStateMachine(); + break; + } + } + + return ret; +} + +void CNetworkProtocol::ResetRxStateMachine(void) +{ + RxState = RxHeader; + RxSize = 0; + SenderID = 0; + SenderAddress = 0; + TargetAddress = 0; + TargetDeviceID = 0; + RxCmd = 0; + memset(mRxData,0,sizeof(mRxData)); + DataCnt = 0; + BufPtr = 0; + CRC = 0; + Flags = 0; + mDataBuffer.clear(); +} + +void CNetworkProtocol::PrepareForNewPacket() +{ + ResetRxStateMachine(); +} + +int CNetworkProtocol::AnalyzeRxBuffer(QByteArray Buffer) +{ + int ret = PROTOCOL_RET_ERROR_EMPTY_BUFFER; + for(int i = 0; i < Buffer.size(); i++) + { + ret = RxStateMachine(Buffer.at(i)); + if(ret != PROTOCOL_RET_OK_PACKET_INCOMPLETE) + { + if(ret == PROTOCOL_RET_OK_BAD_HEADER) + { + qDebug("Protocol Bad header"); + } + else + { + return ret; + } + + } + } + return ret; +} + +void CNetworkProtocol::SetManualPacketReset(bool Manual) +{ + mIsResetManual = Manual; +} diff --git a/Sources/NetworkProtocol.h b/Sources/NetworkProtocol.h new file mode 100644 index 0000000..dbeb0c2 --- /dev/null +++ b/Sources/NetworkProtocol.h @@ -0,0 +1,92 @@ +#ifndef NETWORKPROTOCOL_H +#define NETWORKPROTOCOL_H + +#define USE_BYTEARRAY_IN_SEND + +#include "GlobalDefine.h" +#include "ProtocolDefs.h" +#include "AbstractNetworkInterface.h" +#include + +class CNetworkProtocol +{ +public: + CNetworkProtocol(); + ~CNetworkProtocol(); + QByteArray GetTxPacket(unsigned char MessageID, unsigned char Flags, const char *Data, int Size, unsigned char Address, unsigned char ID, unsigned char SenderDevice = ID_SMS_CLIENT, unsigned char SenderAddress = 1); + int AnalyzeRxBuffer(QByteArray Buffer); + void PrepareForNewPacket(); + void SetManualPacketReset(bool Manual); + + virtual int NewFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data) = 0; + + enum ProtocolRetValues + { + PROTOCOL_RET_OK_PACKET_COMPLETE, + PROTOCOL_RET_OK_PACKET_INCOMPLETE, + PROTOCOL_RET_OK_BAD_HEADER, + PROTOCOL_RET_ERROR_INVALID_TARGET_DEVICE, + PROTOCOL_RET_ERROR_INVALID_TARGET_ADDRESS, + PROTOCOL_RET_ERROR_BAD_CRC, + PROTOCOL_RET_ERROR_SM_LOGIC, + PROTOCOL_RET_ERROR_EMPTY_BUFFER + }; + + char ProtocolGetSenderID(){return SenderID;} + char ProtocolGetSenderAddress(){return SenderAddress;} + int ProtocolGetCmd(){return RxCmd;} + int ProtocolGetDataSize(){return RxSize;} + QByteArray ProtocolGetData(){return mDataBuffer;} + + +private: + void ResetRxStateMachine(); + unsigned char CalcCRC(char *Buffer, int Size); + // int TxData(unsigned char MessageID,unsigned char Flags,unsigned char *Data,int Size, unsigned char Address,unsigned char ID); + + int RxStateMachine(unsigned char Data); + + //State Machine states + enum States + { + Initialization, + RxHeader, + RxID, + RxAdd, + RxMyID, + RxMyAddress, + RxFlags, + RxCMD, + RxSize1, + RxSize2, + RxSize3, + RxSize4, + RxData, + RxCRC + }; + + bool mIsResetManual; + + + char *RxBuff; + char mRxData[MAX_MESSAGE_SIZE+10]; + + int RxState; + int RxSize; + char SenderID; + char SenderAddress; + int RxCmd; + int TargetDeviceID; + int TargetAddress; + int DataCnt; + int BufPtr; + unsigned char CRC; + unsigned char Flags; + + unsigned char State; + + QByteArray mDataBuffer; + +}; + +#endif // NETWORKPROTOCOL_H diff --git a/Sources/ProgramSettings.cpp b/Sources/ProgramSettings.cpp new file mode 100644 index 0000000..806bdad --- /dev/null +++ b/Sources/ProgramSettings.cpp @@ -0,0 +1,146 @@ +#include "ProgramSettings.h" + +CProgramSettings::CProgramSettings() +{ + +} + + +unsigned int CProgramSettings::LoadSettings(CSettings* Settings) +{ + QFile* SettingsFile = new QFile("./Configuration/Settings.mcs"); + if(SettingsFile) + { + if(SettingsFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false) + { + LoadDefaultSettings(Settings); + SaveSettings(Settings); + return RET_ERROR; + } + } + else + { + LoadDefaultSettings(Settings); + return RET_ERROR; + } + + QDataStream * InputStream = new QDataStream(SettingsFile); + + quint32 MagicNbr;// = 0xBAADCAFE; + + *InputStream >> MagicNbr; + + if(MagicNbr != 0xBAADCAFE) + { + LoadDefaultSettings(Settings); + return RET_ERROR; + } + + *InputStream >> *Settings; + + SettingsFile->close(); + delete SettingsFile; + delete InputStream; + + return RET_OK; +} + +void CProgramSettings::LoadDefaultSettings(CSettings *Settings) +{ + Settings->mVoipMSSettings.mDefaultDID = "555555555"; + Settings->mVoipMSSettings.mPassword = "Voip.ms Password"; + Settings->mVoipMSSettings.mUsername = "Voip.ms Username"; + Settings->mVoipMSSettings.mStartDate = QDate::currentDate(); +} + +unsigned int CProgramSettings::SaveSettings(CSettings *SettingsData) +{ + QFile* SettingsFile = new QFile("./Configuration/Settings.mcs"); + if(SettingsFile) + { + if(SettingsFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false) + { + return RET_ERROR; + } + } + else + { + return RET_ERROR; + } + + QDataStream * OutputStream = new QDataStream(SettingsFile); + + quint32 MagicNbr = 0xBAADCAFE; + + *OutputStream << MagicNbr; + + *OutputStream << *SettingsData; + + SettingsFile->flush(); + SettingsFile->close(); + + delete SettingsFile; + delete OutputStream; + + return RET_OK; +} + + +QDataStream &operator<<(QDataStream &out, const CSettings &source) +{ + out << source.mVoipMSSettings; + + return out; +} + +QDataStream &operator>>(QDataStream &in, CSettings &dest) +{ + in >> dest.mVoipMSSettings; + + return in; +} + +QDataStream &operator<<(QDataStream &out, const CVoipMSSMSSettings &source) +{ + out << source.mDefaultDID + << source.mPassword + << source.mStartDate + << source.mUsername; + + return out; +} + +QDataStream &operator>>(QDataStream &in, CVoipMSSMSSettings &dest) +{ + in >> dest.mDefaultDID + >> dest.mPassword + >> dest.mStartDate + >> dest.mUsername; + + return in; +} + +CVoipMSSMSSettings& CVoipMSSMSSettings::operator=(const CVoipMSSMSSettings *source) +{ + if(source == this) + { + return *this; + } + + this->mDefaultDID = source->mDefaultDID; + this->mPassword = source->mPassword; + this->mStartDate = source->mStartDate; + this->mUsername = source->mUsername; + + return *this; +} + +CSettings& CSettings::operator =(const CSettings &source) +{ + if(this == &source) + { + return *this; + } + this->mVoipMSSettings = source.mVoipMSSettings; + return *this; +} diff --git a/Sources/ProgramSettings.h b/Sources/ProgramSettings.h new file mode 100644 index 0000000..d1625a3 --- /dev/null +++ b/Sources/ProgramSettings.h @@ -0,0 +1,54 @@ +#ifndef CPROGRAMSETTINGS_H +#define CPROGRAMSETTINGS_H + +#include "GlobalDefine.h" +#include +#include +#include +#include + + +class CVoipMSSMSSettings +{ +public: + QString mUsername; + QString mPassword; + QDate mStartDate; + QString mDefaultDID; + + CVoipMSSMSSettings &operator=(const CVoipMSSMSSettings *source); + +}; +QDataStream &operator<<(QDataStream &out, const CVoipMSSMSSettings &source); +QDataStream &operator>>(QDataStream &in, CVoipMSSMSSettings &dest); + + +class CSettings +{ +public: + CVoipMSSMSSettings mVoipMSSettings; + + CSettings &operator=(const CSettings &source); +}; + +QDataStream &operator<<(QDataStream &out, const CSettings &source); +QDataStream &operator>>(QDataStream &in, CSettings &dest); + +class CProgramSettings +{ +public: + CProgramSettings(); + unsigned int LoadSettings(CSettings*); + unsigned int SaveSettings(CSettings *SettingsData); + +private: + + void LoadDefaultSettings(CSettings* Settings); + + + +}; + + + +#endif // CPROGRAMSETTINGS_H diff --git a/Sources/ProtocolDefs.h b/Sources/ProtocolDefs.h new file mode 100644 index 0000000..d72478a --- /dev/null +++ b/Sources/ProtocolDefs.h @@ -0,0 +1,186 @@ +/********************************************************************** +Project: Automatic cat feeder +Date: march 19 2006 +Author: Jean-François Martel +Target: PIC 18F252 +Compiler: Microchip mcc18 +Filename: Protocol.h + +File description: Communication protocol implementation. + + +jean-francois.martel@polymtl.ca +**********************************************************************/ + +#ifndef PROTOCOLDEFS_H +#define PROTOCOLDEFS_H + +//Protocol buffer specific definitionsazsdf + +#define MAX_MESSAGE_SIZE 0xFFFF + +#define FRAME_HEADER 0x8A +#define DATA_START 11 +#define ACK 0xA3 +#define NAK 0x90 +#define BROADCAST_VALUE 0xFF + +enum eFrameIndex +{ + FRAME_HEADER_INDEX, + FRAME_SENDER_ID_INDEX, + FRAME_SENDER_ADDRESS_INDEX, + FRAME_DEST_ID_INDEX, + FRAME_DEST_ADDRESS_INDEX, + FRAME_FLAGS_INDEX, + FRAME_COMMAND_INDEX, + FRAME_SIZE1_INDEX, + FRAME_SIZE2_INDEX, + FRAME_DATA_INDEX +}; + +enum DEVICES_IDS +{ + ID_MASTER, //Master Controller + ID_CONSOLE, //LCD Console + ID_PC, //PC + ID_AV_MUX, //Audio Video Multiplexer + ID_IR_REMOTE, //Infra red transmitter + ID_DEADBOLT, + ID_RECEIVER_AMP, + ID_SMS_CLIENT, + ID_ETHERNET_VIRTUAL, + ID_SPRINKLER_DEVICE, + ID_SPRINKLER_INTERFACE, + ID_DEADBOLT_INTERFACE, + ID_NB_DEVICE_ID + +}; + +// Commands definitions + +enum MASTER_CMD +{ + RX_MASTER_GET_STATUS, + TX_MASTER_STATUS, + TX_MASTER_ACK, + RX_MASTER_SET_NET_INFO, + RX_MASTER_GET_NET_INFO, + TX_MASTER_NET_INFO, + RX_MASTER_SEND_DEVICE_CMD, + TX_MASTER_SEND_DEVICE_CMD_ACK, + RX_MASTER_SET_WEATHER_INFO, + TX_MASTER_SET_WEATHER_INFO_ACK, + RX_MASTER_SET_MAIL_MSG, + TX_MASTER_SET_MAIL_MSG_ACK, + RX_MASTER_NEW_OUTLOOK_EMAILS, + TX_MASTER_NEW_OUTLOOK_EMAILS_ACK, + RX_MASTER_TODAYS_EVENTS, + TX_MASTER_TODAYS_EVENTS_ACK +}; + + +//CONSOLE +enum CONSOLE_CMD +{ + RX_CONSOLE_GET_STATUS, + TX_CONSOLE_STATUS, + TX_CONSOLE_ACK, + RX_START_CALIBRATION, + RX_GET_CONSOLE_EVENT_MSG, + TX_CONSOLE_EVENT_MSG, + RX_CONSOLE_SHOW_CALLER_ID, + RX_SET_TIME, + RX_SET_WEATHER, + RX_SEND_NEW_MAIL_MSG, + RX_SEND_NEW_MAIL_MSG_ACK, + RX_NEW_OUTLOOK_EMAILS, + TX_NEW_OUTLOOK_EMAILS_ACK, + RX_TODAYS_EVENTS, + TX_TODAYS_EVENTS_ACK, + LAST_CONSOLE_CMD +}; + + + +enum IR_REMOTE_CMDS +{ + TX_IR_REMOTE_ACK = 1, + RX_GET_STATUS, + TX_REMOTE_STATUS, + RX_TRANSMIT_CMD, + RX_LEARN_IR_CMD, + TX_LEARN_IR_CMD_FINISHED, + RX_GET_IR_DATA, + TX_SEND_IR_DATA, + RX_SET_IR_CMD, + RX_SET_IR_DATA, + RX_GET_IR_CMD, + TX_SEND_IR_CMD, + MAX_IR_REMOTE_CMD +}; + +//The SMS remote interface commands +enum SMS_CLIENT_CMDS +{ + SMS_CLIENT_DEVICE_ACK = 1, + SMS_CLIENT_DEVICE_STATUS_REQUEST, + SMS_CLIENT_DEVICE_STATUS_RESPONSE, + SMS_CLIENT_DEVICE_DID_INFO_REQUEST, + SMS_CLIENT_DEVICE_DID_INFO_RESPONSE, + SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST, + SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE, + SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION, + SMS_CLIENT_DEVICE_SEND_SMS_REQUEST, + SMS_CLIENT_DEVICE_SEND_SMS_ACK, + SMS_CLIENT_DEVICE_GET_CONTACTS_REQUEST, + SMS_CLIENT_DEVICE_GET_CONTACTS_RESPONSE,//12 + SMS_CLIENT_DEVICE_CONTACTS_CHANGED_NOTIFICATION, + + SMS_CLIENT_DEVICE_MAX_MSG + +}; + +//The actual deadbolt device commands +enum DEADBOLT_CMDS +{ + DEADBOLT_DEVICE_ACK = 1, + DEADBOLT_DEVICE_STATUS_REQUEST, + DEADBOLT_DEVICE_STATUS_RESPONSE, + + MAX_DEADBOLT_DEVICE_CMD +}; + +//The actual sprinkler module device commands +enum SPRINKLER_DEVICE_CMDS +{ + SPRINKLER_DEVICE_ACK = 1, + SPRINKLER_DEVICE_STATUS_REQUEST, + SPRINKLER_DEVICE_STATUS_RESPONSE, + + MAX_SPRINKLER_DEVICE_CMD +}; + +//The sprinkler interface commands +enum SPRINKLER_INTERFACE_CMDS +{ + SPRINKLER_INTERFACE_ACK = 1, + SPRINKLER_INTERFACE_STATUS_REQUEST, + SPRINKLER_INTERFACE_STATUS_RESPONSE, + + MAX_SPRINKLER_INTERFACE_CMD +}; + + +enum ETHERNET_NETWORK_VIRTUAL_CMDS +{ + ETH_NETWK_DEVICE_INFO_REQUEST = 0xD0, + ETH_NETWK_DEVICE_INFO_RESPONSE, + ETH_NETWK_SET_DEVICE_INFO_ACK, + ETH_NETWK_CONNECTION_REFUSED, + + MAX_ETHERNET_NETWORK_VIRTUAL_CMDS + +}; + +#endif diff --git a/Sources/SMSClient/Contact.cpp b/Sources/SMSClient/Contact.cpp new file mode 100644 index 0000000..a006132 --- /dev/null +++ b/Sources/SMSClient/Contact.cpp @@ -0,0 +1,107 @@ +#include "Contact.h" + +CContact::CContact(QString ContactNbr, QString ContactName, QPixmap *Picture) +{ + + mRAWContactNbr = ContactNbr; + mContactNumber = ContactNbr; + mContactNumber.insert(0,'('); + mContactNumber.insert(4,") "); + mContactNumber.insert(9,'-'); + + mContactName = ContactName; + if(mContactName == "") + { + mContactName = mContactNumber; + } + + + if(Picture == 0) + { + mContactPicture = QPixmap("./Ico/contact.png"); + } + else + { + if(Picture->isNull()) + { + mContactPicture = QPixmap("./Ico/contact.png"); + } + else + { + mContactPicture = QPixmap(*Picture); + } + } + + + +} + +CContact::CContact() +{ + mContactNumber="INVALID"; + mContactPicture = QPixmap("./Ico/contact.png"); +} + +CContact::~CContact() +{ + +} + +int CContact::SetContactImage(QString FilePath) +{ + mContactPicture = QPixmap(FilePath); + + return RET_OK; +} + +bool operator ==(const CContact& left, const CContact& right) +{ + if(left.mRAWContactNbr == right.mRAWContactNbr) + { + return true; + } + + return false; +} +bool operator !=(const CContact& left, const CContact& right) +{ + return !(left==right); +} + +CContact & CContact::operator=(const CContact source) +{ + if(&source == this) + { + return *this; + } + + this->mRAWContactNbr = source.mRAWContactNbr; + this->mContactName = source.mContactName; + this->mContactNumber = source.mContactNumber; + this->mContactPicture = source.mContactPicture; + + return *this; +} + +QDataStream &operator<<(QDataStream &out, const CContact &source) +{ + out << source.mContactName + << source.mContactNumber + << source.mContactPicture + << source.mRAWContactNbr; + + + return out; +} + +QDataStream &operator>>(QDataStream &in, CContact &dest) +{ + in >> dest.mContactName + >> dest.mContactNumber + >> dest.mContactPicture + >> dest.mRAWContactNbr; + + + + return in; +} diff --git a/Sources/SMSClient/Contact.h b/Sources/SMSClient/Contact.h new file mode 100644 index 0000000..21b4be3 --- /dev/null +++ b/Sources/SMSClient/Contact.h @@ -0,0 +1,29 @@ +#ifndef CCONTACT_H +#define CCONTACT_H + +#include "GlobalDefine.h" +#include +#include + +class CContact +{ +public: + CContact(QString ContactNbr, QString ContactName = "", QPixmap *Picture = 0); + CContact(); + virtual ~CContact(); + + int SetContactImage(QString FilePath); + + QString mContactName; + QPixmap mContactPicture; + QString mContactNumber, mRAWContactNbr; + + CContact &operator=(const CContact source); +}; + + bool operator==(const CContact& left, const CContact& right); + bool operator!=(const CContact& left, const CContact& right); + +QDataStream &operator<<(QDataStream &out, const CContact &source); +QDataStream &operator>>(QDataStream &in, CContact &dest); +#endif // CCONTACT_H diff --git a/Sources/SMSClient/ContactRepository.cpp b/Sources/SMSClient/ContactRepository.cpp new file mode 100644 index 0000000..2db39db --- /dev/null +++ b/Sources/SMSClient/ContactRepository.cpp @@ -0,0 +1,168 @@ +#include "ContactRepository.h" +#include + +CContactRepository::CContactRepository() +{ + +} + +//int CContactRepository::LoadContacts() +//{ +// QFile* ContactsFile = new QFile("./Configuration/Contacts.mcc"); +// if(ContactsFile) +// { +// if(ContactsFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false) +// { +// if(ContactsFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == true) +// { +// mContactsList.clear(); +// SaveContacts(); //create an empty file... +// } +// return 0; +// } +// } +// else +// { +// return 0; +// } + +// mContactsList.clear(); + +// QDataStream * InputStream = new QDataStream(ContactsFile); + +// quint32 MagicNbr;// = 0xBAADCAFE; +// quint32 NbEntries; + +// *InputStream >> MagicNbr; + +// if(MagicNbr != 0xDEADBEEF) +// { +// return RET_ERROR; +// } + +// *InputStream >> NbEntries; + +// for(unsigned int i = 0; i < NbEntries; i++) +// { +// CContact NewContact; +// *InputStream >> NewContact; +// mContactsList.append(NewContact); +// } + +// qDebug("Loaded %d contacts",mContactsList.size()); +// ContactsFile->close(); +// delete ContactsFile; +// delete InputStream; + +// return mContactsList.size(); +//} + +int CContactRepository::SetContacts(QList *ContactsList) +{ + mContactsList.clear(); + mContactsList = *ContactsList; + + return mContactsList.size(); +} + +CContact * CContactRepository::FindContact(QString ContactRawNumber) +{ + for(int i = 0; i < mContactsList.size(); i++) + { + if(mContactsList.at(i).mRAWContactNbr == ContactRawNumber) + { + return &mContactsList[i]; + } + } + return 0; +} + +int CContactRepository::AddContact(CContact Contact) +{ + + for(int i = 0; i < mContactsList.size(); i++) + { + if(mContactsList.at(i) == Contact) + { + mContactsList[i] = Contact; + //SaveContacts(); + return RET_OK; + } + } + + mContactsList.append(Contact); + // SaveContacts(); + return RET_OK; +} + +int CContactRepository::DeleteContact(int index) +{ + if(index < 0 || index >= mContactsList.size()) + { + return RET_ERROR; + } + + mContactsList.takeAt(index); +// SaveContacts(); + return RET_OK; +} + +int CContactRepository::GetContact(int index,CContact& Contact) +{ + if(index < 0 || index >= mContactsList.size()) + { + return RET_ERROR; + } + + Contact = mContactsList.at(index); + + return RET_OK; +} + +CContact *CContactRepository::GetContactPtr(int index) +{ + if(index < 0 || index >= mContactsList.size()) + { + return 0; + } + + return &mContactsList[index]; +} + +//int CContactRepository::SaveContacts() +//{ +// QFile* ContactsFile = new QFile("./Configuration/Contacts.mcc"); +// if(ContactsFile) +// { +// if(ContactsFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered | QIODevice::Truncate) == false) +// { + +// return 0; +// } +// } +// else +// { +// return 0; +// } + + +// QDataStream * InputStream = new QDataStream(ContactsFile); + +// quint32 MagicNbr = 0xDEADBEEF; + +// *InputStream << MagicNbr; +// *InputStream << mContactsList.size(); + +// for(int i = 0; i < mContactsList.size(); i++) +// { +// *InputStream << mContactsList.at(i); +// } + +// ContactsFile->close(); +// delete ContactsFile; +// delete InputStream; + +// qDebug("SAved %d contacts",mContactsList.size()); + +// return mContactsList.size(); +//} diff --git a/Sources/SMSClient/ContactRepository.h b/Sources/SMSClient/ContactRepository.h new file mode 100644 index 0000000..515c05a --- /dev/null +++ b/Sources/SMSClient/ContactRepository.h @@ -0,0 +1,27 @@ +#ifndef CCONTACTREPOSITORY_H +#define CCONTACTREPOSITORY_H + +#include "Contact.h" +#include + + +class CContactRepository +{ +public: + CContactRepository(); + +// int LoadContacts(); +// int SaveContacts(); + int SetContacts(QList *ContactsList); + int AddContact(CContact Contact); + QList *GetContacts(){return &mContactsList;} + int GetContact(int index, CContact &Contact); + CContact *GetContactPtr(int index); + CContact *FindContact(QString ContactRawNumber); + int DeleteContact(int index); + +private: + QList mContactsList; +}; + +#endif // CCONTACTREPOSITORY_H diff --git a/Sources/SMSClient/SMSClient.cpp b/Sources/SMSClient/SMSClient.cpp new file mode 100644 index 0000000..5c1d96f --- /dev/null +++ b/Sources/SMSClient/SMSClient.cpp @@ -0,0 +1,198 @@ +#include "SMSClient.h" +#include + + + +CSMSClient::CSMSClient(CSMSGui *GuiHandle, CVoipMSSMSSettings *ProgramSettings) +{ + qDebug("Creation..."); + mSMSDatabase.mProgramHandle = this; + mGuiHandle = GuiHandle; + mGuiHandle->mProgramHandle = this; + mGuiHandle->mSMSDatabase = &mSMSDatabase; + mSettings = ProgramSettings; + +// mSystemTrayManager = new CSystemTrayManager; +// mSystemTrayManager->mProgramHandle = this; +// mSettingsWindow = new CSettingsWindow(); +// mSettingsWindow->mProgramHandle = this; + //mMainPanel = new Panel; + // mMasterCtrlIF = new CMasterCtrlInterface(); + + +} + +CSMSClient::~CSMSClient() +{ +// delete mSystemTrayManager; +// delete mSettingsWindow; + // delete mMainPanel; + // delete mMasterCtrlIF; + +} + +void CSMSClient::Start() +{ + qDebug("Started!"); + mMasterCtrlIF = new CSMSMasterCtrlInterface(this); + mSMSDatabase.mContactRepository = &mContactRepository; + + mMasterCtrlIF->ConnectToMasterCtrl(); +} + +int CSMSClient::SetAllMsgsDatabase(QString DID, QList *MessagesList) +{ + if(mSMSDatabase.SetAllMessages(DID,MessagesList) == RET_OK) + { + mGuiHandle->FullConversationsUpdate(); +// mMainPanel->mConversationsWindow->FullConversationsUpdate(); +// mMainPanel->mConversationWindow->hide(); + } + return RET_OK; +} + +int CSMSClient::SetDIDDatabase(QString DID) +{ + mSMSDatabase.SetDID(DID); + return RET_OK; +} + +int CSMSClient::NewMessagesEvent(QList *MessagesList) +{ + mSMSDatabase.SetNewMessages("",MessagesList); + return RET_OK; +} + +int CSMSClient::SetContacts(QList *ContactsList) +{ + mContactRepository.SetContacts(ContactsList); + mSMSDatabase.ContactsRepositoryChanged(); + return RET_OK; +} + +//unsigned int CSMSClient::QuitApplicationRequest() +//{ + +// QApplication::exit(69); +// return RET_OK; +//} + +//unsigned int CSMSClient::ShowSettingsWindowRequest() +//{ +// mSettingsWindow->show(); +// return RET_OK; +//} + +//unsigned int CSMSClient::SaveSettings(CSettings *Settings) +//{ +// CSettings toto; +// toto = *Settings; +// mSMSClientSettings = toto; +// mSettingsManager.SaveSettings(&mSMSClientSettings); + +// return RET_OK; +//} + +//unsigned int CSMSClient::SettingsWindowClosed() +//{ + +// return RET_OK; +//} + +//int CSMSClient::AppToggle() +//{ +//// if(mMainPanel->mConversationWindow->isVisible()) +//// { +//// mMainPanel->mConversationWindow->hide(); + +//// } +//// else if(mMainPanel->mConversationsWindow->isVisible()) +//// { +//// mMainPanel->mConversationsWindow->hide(); +//// } +//// else +//// { +//// mMainPanel->mConversationsWindow->show(); +//// } + +// return RET_OK; +//} +//int CSMSClient::AppPosChanged(int NewPosX, int NewPosY) +//{ +//// mMainPanel->mConversationsWindow->setPos(50,50); +//// mMainPanel->mConversationWindow->setPos(50,50); +// return RET_OK; +//} + +int CSMSClient::ShowConversation(QString Contact) +{ + CSMSConversation* Conversation; + Conversation = mSMSDatabase.GetConversation(Contact); + + if(Conversation == 0) + { + return RET_ERROR; + } + +// mMainPanel->mConversationWindow->SetConversation(Conversation); + +// mMainPanel->mConversationsWindow->hide(); +// mMainPanel->mConversationWindow->show(); + + return RET_OK; +} + +//int CSMSClient::CloseConversationsWindow() +//{ +//// mMainPanel->mConversationsWindow->hide(); +// return RET_OK; +//} + +//int CSMSClient::CloseConversationWindow(CConversationWindow *Window) +//{ +// Q_UNUSED(Window) + +//// mMainPanel->mConversationsWindow->FullConversationsUpdate(); +//// mMainPanel->mConversationWindow->hide(); +//// mMainPanel->mConversationsWindow->show(); + +// return RET_OK; +//} + +int CSMSClient::SendSMSMessage(CSMSMessage Message) +{ + mMasterCtrlIF->SendSMS(Message); + return RET_OK; +} + +int CSMSClient::NewMessageNotification(CSMSConversation *Conversation, int MessageIndex) +{ +// if(mMainPanel->mConversationWindow->NewMessageNotification(Conversation,MessageIndex) == true) +// { +// mSMSDatabase.SetConversationAsRead(Conversation); +// } + // mMainPanel->mConversationsWindow->UpdateConversation(Conversation); + mGuiHandle->NewMessageNotification(Conversation,MessageIndex); + + MessageCountChangeNotification(mSMSDatabase.GetNbUnreadMsgs()); + + return RET_OK; +} + +int CSMSClient::SyncConversations() +{ + // mMainPanel->mConversationsWindow->FullConversationsUpdate(); + return RET_OK; +} + +int CSMSClient::MessageCountChangeNotification(int MsgCount) +{ + // mMainPanel->mAppIconWidget->SetNewMsgCount(MsgCount); + mTrayIconMgr->NewSMSMessagesPendingCount(MsgCount); + return RET_OK; +} + +//int CSMSClient::NewConversationAddedToDatabase(CSMSConversation *Conversation) +//{ + +//} diff --git a/Sources/SMSClient/SMSClient.h b/Sources/SMSClient/SMSClient.h new file mode 100644 index 0000000..7949d6f --- /dev/null +++ b/Sources/SMSClient/SMSClient.h @@ -0,0 +1,77 @@ +#ifndef MASTERCTRL_H +#define MASTERCTRL_H + +#include "GlobalDefine.h" +#include "SystemTrayManager.h" +#include "SettingsWindow.h" +#include "ProgramSettings.h" +//#include "AppIconWidget.h" +//#include "MainPanel.h" +#include "SMSMasterCtrlInterface.h" +#include "SMSDatabase.h" +#include "ContactRepository.h" +#include "SMSGui.h" + + + +class CSMSClient : public QObject +{ + Q_OBJECT +public: + CSMSClient(CSMSGui *GuiHandle, CVoipMSSMSSettings *ProgramSettings); + ~CSMSClient(); + + void Start(void); + // CSystemTrayManager *mSystemTrayManager; + // CSettingsWindow *mSettingsWindow; + // CProgramSettings mSettingsManager; + //Panel *mMainPanel; + CSMSMasterCtrlInterface *mMasterCtrlIF; + CSMSDatabase mSMSDatabase; + CContactRepository mContactRepository; + CSMSGui *mGuiHandle; + CVoipMSSMSSettings *mSettings; + CSystemTrayManager *mTrayIconMgr; + + + + +// unsigned int QuitApplicationRequest(); +// unsigned int ShowSettingsWindowRequest(); +// unsigned int SaveSettings(CSettings *Settings); + +// unsigned int SettingsWindowClosed(); + + //AppIconWidget requests +// int AppToggle(); +// int AppPosChanged(int NewPosX, int NewPosY); + + //MasterCtrlIngerface Requests + int SetAllMsgsDatabase(QString DID, QList *MessagesList); + int SetDIDDatabase(QString DID); + int NewMessagesEvent(QList *MessagesList); + int SetContacts(QList *ContactsList); + + + //ConversationsWindow requests + int ShowConversation(QString Contact); +// int CloseConversationsWindow(); + + + //ConversationWindow requests + //int CloseConversationWindow(CConversationWindow* Window); + int SendSMSMessage(CSMSMessage Message); + + //SMSDatabase requests + int NewMessageNotification(CSMSConversation* Conversation, int MessageIndex); + // void NewConversationAddedToDatabase(CSMSConversation *Conversation); + int SyncConversations(); + int MessageCountChangeNotification(int MsgCount); + + +private: + + CSettings mSMSClientSettings; +}; + +#endif // MASTERCTRL_H diff --git a/Sources/SMSClient/SMSConversation.cpp b/Sources/SMSClient/SMSConversation.cpp new file mode 100644 index 0000000..f6f80ef --- /dev/null +++ b/Sources/SMSClient/SMSConversation.cpp @@ -0,0 +1,61 @@ +#include "SMSConversation.h" + +CSMSConversation::CSMSConversation(CContact ConversationContact) +{ + mConversationContact = ConversationContact; +} + +CSMSConversation::CSMSConversation() +{ + +} + +CSMSConversation::~CSMSConversation() +{ + for(int i = 0; i < mMessages.size(); i++) + { + delete mMessages.at(i); + } + + mMessages.clear(); +} + +int CSMSConversation::InsertNewMessage(CSMSMessage *Message) +{ + mMessages.prepend(Message); + + return RET_OK; +} + +int CSMSConversation::InsertMessage(CSMSMessage *Message) +{ + mMessages.append(Message); + + return RET_OK; +} + +CContact* CSMSConversation::GetConversationContact() +{ + return &mConversationContact; +} + +int CSMSConversation::SetConversationContact(CContact *Contact) +{ + mConversationContact = *Contact; + return RET_OK; +} + +CSMSMessage* CSMSConversation::GetMostRecentMessage() +{ + if(mMessages.isEmpty()) + { + return 0; + } + + return mMessages.at(0); +} + +QList *CSMSConversation::GetMessages() +{ + return &mMessages; +} diff --git a/Sources/SMSClient/SMSConversation.h b/Sources/SMSClient/SMSConversation.h new file mode 100644 index 0000000..bba12e3 --- /dev/null +++ b/Sources/SMSClient/SMSConversation.h @@ -0,0 +1,27 @@ +#ifndef CSMSCONVERSATION_H +#define CSMSCONVERSATION_H + +#include "SMSMessage.h" +#include +#include "Contact.h" + +class CSMSConversation +{ +public: + CSMSConversation(CContact ConversationContact); + CSMSConversation(); + ~CSMSConversation(); + + CContact mConversationContact; + QList mMessages; + + int InsertNewMessage(CSMSMessage *Message); + int InsertMessage(CSMSMessage *Message); + CContact *GetConversationContact(); + int SetConversationContact(CContact *Contact); + CSMSMessage *GetMostRecentMessage(); + QList *GetMessages(); + +}; + +#endif // CSMSCONVERSATION_H diff --git a/Sources/SMSClient/SMSDatabase.cpp b/Sources/SMSClient/SMSDatabase.cpp new file mode 100644 index 0000000..f148141 --- /dev/null +++ b/Sources/SMSClient/SMSDatabase.cpp @@ -0,0 +1,204 @@ +#include "SMSDatabase.h" +#include "SMSClient.h" + +CSMSDatabase::CSMSDatabase() +{ + mProgramHandle = 0; + mNbUnreadMessages = 0; + mConversations.clear(); +} + + +CSMSDatabase::~CSMSDatabase() +{ + for(int i = 0; i < mConversations.size(); i++) + { + delete mConversations.at(i); + } + mConversations.clear(); +} + +int CSMSDatabase::SetAllMessages(QString DID, QList *MessagesList) +{ + Q_UNUSED(DID) + mConversations.clear(); + mNbUnreadMessages = 0; + // SetDID(DID); + mContactsHash.clear(); + + for(int i = 0; i < MessagesList->size(); i++) + { + CSMSMessage *CurMsg = new CSMSMessage(MessagesList->at(i)); + QString ContactNbr = CurMsg->mContact; + + if(mContactsHash.contains(ContactNbr) == true) + { + int Index = mContactsHash.value(ContactNbr); + mConversations.at(Index)->InsertMessage(CurMsg); + } + else + { + CSMSConversation *NewConversation = new CSMSConversation(CContact(CurMsg->mContact)); + CContact *Contact = mContactRepository->FindContact(CurMsg->mContact); + if(Contact != 0) + { + NewConversation->SetConversationContact(Contact); + } + mConversations.append(NewConversation); + int Index = mConversations.size()-1; + mContactsHash.insert(CurMsg->mContact,Index); + mConversations.at(Index)->InsertMessage(CurMsg); + } + } + + qDebug("Rx %d Messages",MessagesList->size()); + + return RET_OK; +} + +int CSMSDatabase::SetNewMessages(QString DID, QList *MessagesList) +{ + Q_UNUSED(DID) + + bool SyncConversations = false; + + for(int i = 0; i < MessagesList->size(); i++) + { + CSMSMessage *CurMsg = new CSMSMessage(MessagesList->at(i)); + QString ContactNbr = CurMsg->mContact; + // if(CurMsg->mType == SMS_RECEIVED_TYPE) + { + mNbUnreadMessages++; + CurMsg->mIsRead = false; + } + + if(mContactsHash.contains(ContactNbr) == true) + { + int Index = mContactsHash.value(ContactNbr); + mConversations.at(Index)->InsertNewMessage(CurMsg); + + + mProgramHandle->NewMessageNotification(mConversations.at(Index),0); + +// if(Index != 0) +// { +// CSMSConversation *Conversation = mConversations.takeAt(Index); +// mConversations.prepend(Conversation); +// mContactsHash.clear(); + +// for(int i = 0; i < mConversations.size(); i++) +// { +// mContactsHash.insert(mConversations.at(i)->mConversationContact.mRAWContactNbr,i); +// } + +// SyncConversations = true; +// } + } + else + { + CSMSConversation *NewConversation = new CSMSConversation(CContact(CurMsg->mContact)); + mConversations.append(NewConversation); + int Index = mConversations.size()-1; + mContactsHash.insert(CurMsg->mContact,Index); + mConversations.at(Index)->InsertNewMessage(CurMsg); + + SyncConversations = true; + mProgramHandle->MessageCountChangeNotification(mNbUnreadMessages); + } + } + + if(SyncConversations) + { + mProgramHandle->SyncConversations(); + } + + qDebug("Rx %d New Messages",MessagesList->size()); + + return RET_OK; +} + +QList* CSMSDatabase::GetConversations(QString DID) +{ + Q_UNUSED(DID); + + return &mConversations; +} + +CSMSConversation * CSMSDatabase::GetConversation(QString Contact) +{ + if(mContactsHash.contains(Contact)) + { + return mConversations.at(mContactsHash.value(Contact)); + } + + return 0; +} + +int CSMSDatabase::SetDID(QString DID) +{ + mClientDID = DID; + + mFormattedDID = DID; + mFormattedDID.insert(0,'('); + mFormattedDID.insert(4,") "); + mFormattedDID.insert(9,'-'); + + return RET_OK; + +} + +int CSMSDatabase::SetConversationAsRead(CSMSConversation *Conversation, bool ForceAll) +{ + if(Conversation == 0) + { + return RET_ERROR; + } + + QList *Messages = Conversation->GetMessages(); + + for(int i = 0; i < Messages->size(); i++) + { + if(Messages->at(i)->mIsRead == true) + { + if(ForceAll == false) + { + break; + } + } + else + { + Messages->at(i)->mIsRead = true; + // if(Messages->at(i)->mType == SMS_RECEIVED_TYPE) + { + mNbUnreadMessages--; + } + } + } + + mProgramHandle->MessageCountChangeNotification(mNbUnreadMessages); + + return RET_OK; +} + + +int CSMSDatabase::ContactsRepositoryChanged() +{ + CContact *Contact; + for(int i = 0; i < mConversations.size(); i++) + { + Contact = mContactRepository->FindContact(mConversations.at(i)->GetConversationContact()->mRAWContactNbr); + if(Contact != 0) + { + mConversations.at(i)->SetConversationContact(Contact); + } + } + return RET_OK; +} + + + + + + + + diff --git a/Sources/SMSClient/SMSDatabase.h b/Sources/SMSClient/SMSDatabase.h new file mode 100644 index 0000000..c7761b2 --- /dev/null +++ b/Sources/SMSClient/SMSDatabase.h @@ -0,0 +1,52 @@ +#ifndef CSMSDATABASE_H +#define CSMSDATABASE_H + + +#include "SMSConversation.h" +#include "SMSMessage.h" +#include "ContactRepository.h" +#include +#include + +class CSMSClient; + + +class CSMSDatabase +{ +public: + enum eNewMessageReadStatus + { + DB_NEW_MSG_READ, + DB_NEW_MSG_UNREAD + }; + + CSMSDatabase(); + ~CSMSDatabase(); + + CSMSClient *mProgramHandle; + CContactRepository *mContactRepository; + + QList mConversations; + QString mClientDID, mFormattedDID; + + QHash mContactsHash; + int mNbUnreadMessages; + + int SetAllMessages(QString DID, QList *MessagesList); + int SetNewMessages(QString DID, QList *MessagesList); + int SetDID(QString DID); + int SetConversationAsRead(CSMSConversation* Conversation, bool ForceAll = false); + int ContactsRepositoryChanged(); + + QList *GetConversations(QString DID = ""); + CSMSConversation* GetConversation(QString Contact); + QString GetDID(){return mClientDID;} + QString GetFormattedDID(){return mFormattedDID;} + int GetNbUnreadMsgs(){return mNbUnreadMessages;} + +// bool SortConversations(); + + +}; + +#endif // CSMSDATABASE_H diff --git a/Sources/SMSClient/SMSGui.cpp b/Sources/SMSClient/SMSGui.cpp new file mode 100644 index 0000000..60a715c --- /dev/null +++ b/Sources/SMSClient/SMSGui.cpp @@ -0,0 +1,276 @@ +#include "SMSGui.h" +#include "ui_SMSGui.h" +#include +#include "SMSClient.h" +#include + +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 *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(); + 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(); + 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(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)); + +} diff --git a/Sources/SMSClient/SMSGui.h b/Sources/SMSClient/SMSGui.h new file mode 100644 index 0000000..f44f85b --- /dev/null +++ b/Sources/SMSClient/SMSGui.h @@ -0,0 +1,49 @@ +#ifndef SMSGUI_H +#define SMSGUI_H + +#include +#include "ui_SMSGui.h" +#include "SMSDatabase.h" + +//namespace Ui { +//class CSMSGui; +//} +class CSMSClient; + +enum eNewMessageStatus +{ + NEW_MSG_READ_STATUS, + NEW_MSG_UNREAD_STATUS, + NEW_MSG_ERROR_STATUS +}; + +class CSMSGui : public QWidget, private Ui::CSMSGui +{ + Q_OBJECT + +public: + explicit CSMSGui(QWidget *parent = 0); + ~CSMSGui(); + + int FullConversationsUpdate(); + int NewMessageNotification(CSMSConversation* Conversation, int MessageIndex); + int SendEditMessage(); + + int UpdateDisplayedConversation(int MessageIndex = -1); + virtual bool eventFilter(QObject *obj, QEvent *event); + + CSMSDatabase *mSMSDatabase; + CSMSConversation *mSelectedConversation; + CSMSClient *mProgramHandle; + +private: + int mCharCounter, mMsgCounter; + +public slots: + // void ConversationSelected(QTreeWidgetItem * item, int column); + void ConversationClicked(QTreeWidgetItem * item, int column); + void SendMsgBtnClicked(bool); + void SMSEditZoneContentsChanged(); +}; + +#endif // SMSGUI_H diff --git a/Sources/SMSClient/SMSMasterCtrlInterface.cpp b/Sources/SMSClient/SMSMasterCtrlInterface.cpp new file mode 100644 index 0000000..746e278 --- /dev/null +++ b/Sources/SMSClient/SMSMasterCtrlInterface.cpp @@ -0,0 +1,291 @@ +#include "SMSMasterCtrlInterface.h" +#include +#include +#include +#include "SystemGui.h" +#include "Contact.h" +#include "SMSClient.h" + + +CSMSMasterCtrlInterface::CSMSMasterCtrlInterface(CSMSClient *ProgramHandle) +{ + mDeviceAddress = 1; + mNetworkPort = 2182; + mMasterCtrlAddress = "127.0.0.1"; +// mNetworkPort = 6463; +// mMasterCtrlAddress = "192.168.0.112"; + mNetworkCommSocket = 0; + mMyDeviceID = ID_SMS_CLIENT; + + mProgramHandle = ProgramHandle; +} + +CSMSMasterCtrlInterface::~CSMSMasterCtrlInterface() +{ + if(mNetworkCommSocket !=0) + { +// mNetworkCommSocket->disconnectFromHost(); + // delete mNetworkCommSocket; + } +} + +//int CSMSMasterCtrlInterface::ConnectToMasterCtrl() +//{ +//// if(mNetworkCommSocket == 0) +//// { +//// mNetworkCommSocket = new QTcpSocket(); +//// } +//// connect(mNetworkCommSocket,SIGNAL(connected()),this,SLOT(NetworkSocketConnected())); +//// connect(mNetworkCommSocket,SIGNAL(disconnected()),this,SLOT(NetworkSocketDisconnected())); +//// connect(mNetworkCommSocket,SIGNAL(readyRead()),this,SLOT(NetworkSocketDataAvailable())); + +//// mNetworkCommSocket->connectToHost(mMasterCtrlAddress,mNetworkPort); + +// return RET_OK; +//} + +int CSMSMasterCtrlInterface::DeviceConnectedToMaster(bool Connected) +{ + if(Connected) + { + mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_DID_INFO_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress)); + } + else + { + //??? + } + return RET_OK; +} + +int CSMSMasterCtrlInterface::DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderDeviceID, int SenderAddress, int MessageID, int DataSize, QByteArray Data) +{ + Q_UNUSED(DataSize) + + +// if(TargetDeviceID == ID_ETHERNET_VIRTUAL) +// { +// switch(MessageID) +// { +// case ETH_NETWK_DEVICE_INFO_REQUEST: +// { +// QByteArray Frame,ResponseData; +// ResponseData.append((char)ID_SMS_CLIENT); +// ResponseData.append((char)mDeviceAddress); +// Frame = GetTxPacket(ETH_NETWK_DEVICE_INFO_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_ETHERNET_VIRTUAL,mDeviceAddress); +// mNetworkCommSocket->write(Frame); +// break; +// } +// case ETH_NETWK_CONNECTION_REFUSED: +// { +// qDebug("MasterCtrl connection refused"); +// mNetworkCommSocket->close(); +// delete mNetworkCommSocket; +// mNetworkCommSocket = 0; +// break; +// } +// case ETH_NETWK_SET_DEVICE_INFO_ACK: +// { +// mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_DID_INFO_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress)); +// qDebug("MasterCtrl accepted connection"); +// break; +// } +// case ETH_NETWK_DEVICE_INFO_RESPONSE: +// default: +// { +// break; +// } + +// } +// } + /* else*/ if(TargetDeviceID == ID_SMS_CLIENT && (TargetDeviceAddress == BROADCAST_VALUE || TargetDeviceAddress == mDeviceAddress)) + { + switch(MessageID) + { + case SMS_CLIENT_DEVICE_ACK: + { + break; + } + case SMS_CLIENT_DEVICE_STATUS_REQUEST: + { + QByteArray Frame,ResponseData; + ResponseData.append(ACK); + ResponseData.append((char)SMS_CLIENT_DEVICE_STATUS_REQUEST); + Frame = GetTxPacket(SMS_CLIENT_DEVICE_STATUS_RESPONSE,0,ResponseData.data(),ResponseData.size(),1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress); + mNetworkCommSocket->write(Frame); + // qDebug("Rx Status Request"); + break; + } + case SMS_CLIENT_DEVICE_DID_INFO_RESPONSE: + { + QString DidInfo; + QDataStream *Strm = new QDataStream(Data); + *Strm >> DidInfo; + delete Strm; + qDebug("Rx DID info: %s",DidInfo.toUtf8().data()); + mProgramHandle->SetDIDDatabase(DidInfo); + +// mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress)); + mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_CONTACTS_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress)); + break; + } + case SMS_CLIENT_DEVICE_GET_ALL_MSG_RESPONSE: + { + QList RAWSMSList; + QDataStream *Stream = new QDataStream(Data); + CSMSMessage NewMsg; + + int NbMsg; + *Stream >> NbMsg; + + for(int i = 0; i < NbMsg; i++) + { + *Stream >> NewMsg; + RAWSMSList.append(NewMsg); + } + + mProgramHandle->SetAllMsgsDatabase("",&RAWSMSList); + + RAWSMSList.clear(); + + + delete Stream; + break; + } + case SMS_CLIENT_DEVICE_NEW_MSG_NOTIFICATION: + { + QList RAWSMSList; + QDataStream *Stream = new QDataStream(Data); + CSMSMessage NewMsg; + + int NbMsg; + *Stream >> NbMsg; + + for(int i = 0; i < NbMsg; i++) + { + *Stream >> NewMsg; + RAWSMSList.append(NewMsg); + } + + mProgramHandle->NewMessagesEvent(&RAWSMSList); + + RAWSMSList.clear(); + + + delete Stream; + + + break; + } + case SMS_CLIENT_DEVICE_SEND_SMS_ACK: + { + + QDataStream *Stream = new QDataStream(Data); + qint32 Success; + *Stream >> Success; + if(Success == 1) + { + qDebug("SMS Sent!!!"); + } + else + { + qDebug("Send SMS Failed"); + } + + delete Stream; + + break; + } + case SMS_CLIENT_DEVICE_GET_CONTACTS_RESPONSE: + { + QList ContactsList; + QDataStream *Stream = new QDataStream(Data); + CContact NewContact; + + int NbContact; + *Stream >> NbContact; + + for(int i = 0; i < NbContact; i++) + { + *Stream >> NewContact; + ContactsList.append(NewContact); + } + + mProgramHandle->SetContacts(&ContactsList); + + ContactsList.clear(); + qDebug("Contacts downloaded!"); + + + delete Stream; + + mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress)); + break; + } + case SMS_CLIENT_DEVICE_CONTACTS_CHANGED_NOTIFICATION: + { + mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_GET_CONTACTS_REQUEST,0,0,0,1,ID_MASTER,ID_SMS_CLIENT,mDeviceAddress)); + break; + } + + case SMS_CLIENT_DEVICE_SEND_SMS_REQUEST: + case SMS_CLIENT_DEVICE_STATUS_RESPONSE: + case SMS_CLIENT_DEVICE_DID_INFO_REQUEST: + case SMS_CLIENT_DEVICE_GET_ALL_MSG_REQUEST: + default: + { + qDebug("SMSDevice: Invalid Ethernet MSg received: %d",MessageID); + break; + } + + } + } + + return RET_OK; +} + +//int CSMSMasterCtrlInterface::DisconnectMasterCtrl() +//{ +// if(mNetworkCommSocket != 0) +// { +// mNetworkCommSocket->close(); +// // mNetworkCommSocket->deleteLater(); +// } + +// return RET_OK; +//} + +//void CSMSMasterCtrlInterface::NetworkSocketConnected() +//{ +// qDebug("Connected to MasterCtrl"); +//} + +//void CSMSMasterCtrlInterface::NetworkSocketDataAvailable() +//{ +// AnalyzeRxBuffer(mNetworkCommSocket->readAll()); +//} + +void CSMSMasterCtrlInterface::SendSMS(CSMSMessage Message) +{ + QByteArray FrameData; + QBuffer FrameBuffer(&FrameData); + FrameBuffer.open(QIODevice::ReadWrite); + QDataStream *FrameDataStrm = new QDataStream(&FrameBuffer); + + qint32 NbMsg = 1; + + *FrameDataStrm << NbMsg << Message; + + FrameBuffer.seek(0); + + mNetworkCommSocket->write(GetTxPacket(SMS_CLIENT_DEVICE_SEND_SMS_REQUEST,0,FrameData,FrameData.size(),1,ID_MASTER)); + + FrameBuffer.close(); + delete FrameDataStrm; +} + +//void CSMSMasterCtrlInterface::NetworkSocketDisconnected() +//{ +// qDebug("Disconnected from MasterCtrl"); +//// delete mNetworkCommSocket; +//// mNetworkCommSocket = 0; +//} diff --git a/Sources/SMSClient/SMSMasterCtrlInterface.h b/Sources/SMSClient/SMSMasterCtrlInterface.h new file mode 100644 index 0000000..5e05160 --- /dev/null +++ b/Sources/SMSClient/SMSMasterCtrlInterface.h @@ -0,0 +1,47 @@ +#ifndef CSMSMASTERCTRLINTERFACE_H +#define CSMSMASTERCTRLINTERFACE_H + +//#include "NetworkProtocol.h" +//#include "GlobalDefine.h" +//#include "ProtocolDefs.h" +//#include +//#include "SMSMessage.h" +#include "MasterCtrlInterface.h" + + +class CSystemGui; +class CSMSClient +; +class CSMSMasterCtrlInterface: public CMasterCtrlInterface//CNetworkProtocol +{ + Q_OBJECT +public: + CSMSMasterCtrlInterface(CSMSClient *ProgramHandle); + ~CSMSMasterCtrlInterface(); + + CSMSClient *mProgramHandle; + + // virtual int DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data); + +// QTcpSocket *mNetworkCommSocket; +// int mDeviceAddress; +// int mNetworkPort; +// QString mMasterCtrlAddress; + + +// int ConnectToMasterCtrl(); +// int DisconnectMasterCtrl(); +// virtual int NewFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data); + + virtual int DeviceFrameReceived(int TargetDeviceID, int TargetDeviceAddress, int SenderID, int SenderAddress, int MessageID, int DataSize, QByteArray Data); + virtual int DeviceConnectedToMaster(bool Connected); + + void SendSMS(CSMSMessage Message); + +//public slots: +// void NetworkSocketConnected(); +// void NetworkSocketDataAvailable(); +// void NetworkSocketDisconnected(); +}; + +#endif // CSMSMasterCtrlInterface_H diff --git a/Sources/SMSClient/SMSMessage.cpp b/Sources/SMSClient/SMSMessage.cpp new file mode 100644 index 0000000..40df6c1 --- /dev/null +++ b/Sources/SMSClient/SMSMessage.cpp @@ -0,0 +1,63 @@ +#include "SMSMessage.h" +#include + + + +CSMSMessage::CSMSMessage() +{ + this->mContact = "INVALID"; + this->mDateTime = QDateTime::currentDateTime(); + this->mDID = "INVALID"; + this->mMessageText = "INVALID"; + this->mType = SMS_INVALID_TYPE; + this->mVOIPMSDatabaseID = "INVALID"; + + mIsRead = true; +} + +CSMSMessage::CSMSMessage(const CSMSMessage &Message) +{ + this->mContact = Message.mContact; + this->mDateTime = Message.mDateTime; + this->mDID = Message.mDID; + this->mMessageText = Message.mMessageText; + this->mType = Message.mType; + this->mVOIPMSDatabaseID = Message.mVOIPMSDatabaseID; + + mIsRead = true; +} + + +CSMSMessage::~CSMSMessage() +{ + +} + +QDataStream &operator<<(QDataStream &out, const CSMSMessage &source) +{ + + out << source.mDID + << source.mDateTime + << source.mMessageText + << source.mContact + << (qint32)source.mType + << source.mVOIPMSDatabaseID; + + + return out; +} + +QDataStream &operator>>(QDataStream &in, CSMSMessage &dest) +{ + qint32 temp; + in >> dest.mDID + >> dest.mDateTime + >> dest.mMessageText + >> dest.mContact + >> temp + >> dest.mVOIPMSDatabaseID; + + dest.mType = (eSMSType)temp; + + return in; +} diff --git a/Sources/SMSClient/SMSMessage.h b/Sources/SMSClient/SMSMessage.h new file mode 100644 index 0000000..6705cce --- /dev/null +++ b/Sources/SMSClient/SMSMessage.h @@ -0,0 +1,44 @@ +#ifndef CSMSMESSAGE_H +#define CSMSMESSAGE_H + +#include "GlobalDefine.h" +#include +#include + +typedef enum eSMSType +{ + SMS_SENT_TYPE, + SMS_RECEIVED_TYPE, + SMS_INVALID_TYPE +}SmsType_t; + +class CSMSMessage +{ + +public: + CSMSMessage(); + CSMSMessage(const CSMSMessage &Message); + ~CSMSMessage(); + + /*qint64*/QString mVOIPMSDatabaseID; + QDateTime mDateTime; + SmsType_t mType; + QString mDID, mContact, mMessageText; + + bool mIsRead; + + + +// [id] => 111120 +// [date] => 2014-03-30 10:24:16 +// [type] => 0 +// [did] => 8574884828 +// [contact] => 8577884821 +// [message] => hello+john + +}; + +QDataStream &operator<<(QDataStream &out, const CSMSMessage &source); +QDataStream &operator>>(QDataStream &in, CSMSMessage &dest); + +#endif // CSMSOBJECT_H diff --git a/Sources/SettingsWindow.cpp b/Sources/SettingsWindow.cpp new file mode 100644 index 0000000..a9db25f --- /dev/null +++ b/Sources/SettingsWindow.cpp @@ -0,0 +1,147 @@ +#include "SettingsWindow.h" +#include +#include +#include +#include "SMSClient.h" + + +CSettingsWindow::CSettingsWindow() +{ + resize(600,600); + + QVBoxLayout *MainLayout = new QVBoxLayout; + QWidget *mPagesContainer = new QWidget(this); + + mOptionsTabBar = new QTabBar(); + mOptionsTabBar->addTab("SMS"); + mOptionsTabBar->addTab("Network"); + mOptionsTabBar->resize(this->geometry().width(),mOptionsTabBar->height()); + MainLayout->addWidget(mOptionsTabBar); + + mSMSPage = new QWidget(mPagesContainer); + // mVoipPage->resize(this->size()); + + QGridLayout *mSMSPageLayout = new QGridLayout; + + + QLabel *Label; + mVoipMSUsername = new QLineEdit; + Label = new QLabel("Voip.ms Username: "); + mSMSPageLayout->addWidget(Label,0,1,1,1); + mSMSPageLayout->addWidget(mVoipMSUsername,0,2,1,2/*,Qt::AlignLeft*/); + + Label = new QLabel("Voip.ms Password: "); + mVoipMSPassword = new QLineEdit; + mVoipMSPassword->setEchoMode(QLineEdit::Password); + mSMSPageLayout->addWidget(Label,1,1,1,1); + mSMSPageLayout->addWidget(mVoipMSPassword,1,2,1,1/*,Qt::AlignLeft*/); + + mRetreiveDIDSButton = new QPushButton("Get DIDs"); + connect(mRetreiveDIDSButton,SIGNAL(clicked(bool)),this,SLOT(RetreiveDIDButtonClicked(bool))); + mSMSPageLayout->addWidget(mRetreiveDIDSButton,1,3,1,1); + + + Label = new QLabel("DID:"); + mDIDSelectionDropList = new QComboBox(); + mSMSPageLayout->addWidget(Label,2,1,1,1); + mSMSPageLayout->addWidget(mDIDSelectionDropList,2,2,1,1); + + + mVoipMSCalendar = new QCalendarWidget; + Label = new QLabel("SMS retreival stard date:"); + mSMSPageLayout->addWidget(Label,3,1,1,1); + mSMSPageLayout->addWidget(mVoipMSCalendar,4,1,1,4); + + mDoneButton = new QPushButton("Done"); + MainLayout->addWidget(mDoneButton); + connect(mDoneButton,SIGNAL(clicked(bool)),this,SLOT(DoneButtonClicked(bool))); + + + + + mSMSPage->setLayout(mSMSPageLayout); + mSMSPage->show(); + + MainLayout->addWidget(mPagesContainer); + setLayout(MainLayout); + + connect(mOptionsTabBar,SIGNAL(currentChanged(int)),this,SLOT(TabBarClicked(int))); + +} + +CSettingsWindow::~CSettingsWindow() +{ + +} + +void CSettingsWindow::TabBarClicked(int TabIndex) +{ + if(TabIndex == 0)//SMS + { + mSMSPage->show(); + + + } + else if(TabIndex == 1)//Network + { + mSMSPage->hide(); + + } +} + +void CSettingsWindow::RetreiveDIDButtonClicked(bool checked) +{ + Q_UNUSED(checked) + + if(mVoipMSUsername->text().isEmpty() || mVoipMSPassword->text().isEmpty()) + { + return; + } + + + + qDebug("CLick!"); +} + +void CSettingsWindow::DIDsListFetched(QStringList DIDs) +{ + if(DIDs.size() == 0) + { + + } + else + { + mDIDSelectionDropList->clear(); + for(int i = 0; i < DIDs.size(); i++) + { + mDIDSelectionDropList->addItem(DIDs.at(i)); + } + } +} + +unsigned int CSettingsWindow::SetSettingsData(CSettings *SettingsData) +{ + mVoipMSPassword->setText(SettingsData->mVoipMSSettings.mPassword); + mVoipMSUsername->setText(SettingsData->mVoipMSSettings.mUsername); + mDIDSelectionDropList->clear(); + mDIDSelectionDropList->addItem(SettingsData->mVoipMSSettings.mDefaultDID); + mVoipMSCalendar->setSelectedDate(SettingsData->mVoipMSSettings.mStartDate); + return RET_OK; +} + +void CSettingsWindow::DoneButtonClicked(bool checked) +{ + Q_UNUSED(checked) + + CSettings *Settings = new CSettings; + Settings->mVoipMSSettings.mDefaultDID = mDIDSelectionDropList->currentText(); + Settings->mVoipMSSettings.mPassword = mVoipMSPassword->text(); + Settings->mVoipMSSettings.mStartDate = mVoipMSCalendar->selectedDate(); + Settings->mVoipMSSettings.mUsername = mVoipMSUsername->text(); + + mProgramHandle->SaveSettings(Settings); + mProgramHandle->SettingsWindowClosed(); + delete Settings; + + this->hide(); +} diff --git a/Sources/SettingsWindow.h b/Sources/SettingsWindow.h new file mode 100644 index 0000000..852fc8d --- /dev/null +++ b/Sources/SettingsWindow.h @@ -0,0 +1,44 @@ +#ifndef CSETTINGSWINDOW_H +#define CSETTINGSWINDOW_H + +#include "GlobalDefine.h" +#include +#include +#include +#include +#include +#include +#include "ProgramSettings.h" + +class CSMSClient; + + +class CSettingsWindow : public QDialog +{ + Q_OBJECT +public: + CSettingsWindow(); + virtual ~CSettingsWindow(); + + CSMSClient *mProgramHandle; + + QWidget *mSMSPage; + QTabBar *mOptionsTabBar; + QLineEdit *mVoipMSUsername; + QLineEdit *mVoipMSPassword; + QCalendarWidget *mVoipMSCalendar; + QComboBox *mDIDSelectionDropList; + QPushButton *mRetreiveDIDSButton; + + QPushButton *mDoneButton; + + unsigned int SetSettingsData(CSettings *SettingsData); + +public slots: + void TabBarClicked(int); + void RetreiveDIDButtonClicked(bool); + void DIDsListFetched(QStringList); + void DoneButtonClicked(bool); +}; + +#endif // CSETTINGSWINDOW_H diff --git a/Sources/Sprinkler/SprinklerGui.cpp b/Sources/Sprinkler/SprinklerGui.cpp new file mode 100644 index 0000000..f2ec187 --- /dev/null +++ b/Sources/Sprinkler/SprinklerGui.cpp @@ -0,0 +1,13 @@ +#include "SprinklerGui.h" +#include "ui_SprinklerGui.h" + +CSprinklerGui::CSprinklerGui(QWidget *parent) : + QWidget(parent) +{ + setupUi(this); +} + +CSprinklerGui::~CSprinklerGui() +{ + +} diff --git a/Sources/Sprinkler/SprinklerGui.h b/Sources/Sprinkler/SprinklerGui.h new file mode 100644 index 0000000..1db22ee --- /dev/null +++ b/Sources/Sprinkler/SprinklerGui.h @@ -0,0 +1,23 @@ +#ifndef SPRINKLERGUI_H +#define SPRINKLERGUI_H + +#include +#include "ui_SprinklerGui.h" + +namespace Ui { +class CSprinklerGui; +} + +class CSprinklerGui : public QWidget, public Ui::CSprinklerGui +{ + Q_OBJECT + +public: + explicit CSprinklerGui(QWidget *parent = 0); + ~CSprinklerGui(); + +private: + +}; + +#endif // SPRINKLERGUI_H diff --git a/Sources/Sprinkler/SprinklerGui.ui b/Sources/Sprinkler/SprinklerGui.ui new file mode 100644 index 0000000..4cfbdd8 --- /dev/null +++ b/Sources/Sprinkler/SprinklerGui.ui @@ -0,0 +1,32 @@ + + + CSprinklerGui + + + + 0 + 0 + 1047 + 560 + + + + Form + + + + + 0 + -10 + 201 + 51 + + + + Sprinklers + + + + + + diff --git a/Sources/SystemGui.cpp b/Sources/SystemGui.cpp new file mode 100644 index 0000000..93adb69 --- /dev/null +++ b/Sources/SystemGui.cpp @@ -0,0 +1,62 @@ +#include "SystemGui.h" + + +CSystemGui::CSystemGui(QObject *parent) : QObject(parent) +{ + mGui = new CGuiMain(); + mProgramSettings = new CProgramSettings(); + mSMSClient = new CSMSClient(mGui->mSMSGui,&mSettings.mVoipMSSettings); + + mSysTrayMgr = new CSystemTrayManager(); + mSysTrayMgr->mProgramHandle=this; + mSMSClient->mTrayIconMgr = mSysTrayMgr; + +} + +CSystemGui::~CSystemGui() +{ + delete mGui; + delete mSMSClient; + delete mProgramSettings; + delete mSysTrayMgr; + +} + +void CSystemGui::Start() +{ + mProgramSettings->LoadSettings(&mSettings); + mGui->show(); + mSMSClient->Start(); + +} + +void CSystemGui::ShowSettingsWindowRequest() +{ + +} + +void CSystemGui::QuitApplicationRequest() +{ + QApplication::exit(69); +} + +int CSystemGui::RespawnMainWindowRequest() +{ + //qDebug("Respawn request"); + mGui->RespawnMainWindow(); + return RET_OK; +} + +int CSystemGui::TrayIconLeftClick() +{ + if(mGui->isVisible()) + { + mGui->hide(); + } + else + { + mGui->RespawnMainWindow(); + } + + return RET_OK; +} diff --git a/Sources/SystemGui.h b/Sources/SystemGui.h new file mode 100644 index 0000000..83c4bf7 --- /dev/null +++ b/Sources/SystemGui.h @@ -0,0 +1,37 @@ +#ifndef SYSTEMGUI_H +#define SYSTEMGUI_H + +#include +#include "GuiMain.h" +#include "SMSClient.h" +#include "ProgramSettings.h" +#include "SystemTrayManager.h" + +class CSystemGui : public QObject +{ + Q_OBJECT +public: + explicit CSystemGui(QObject *parent = 0); + ~CSystemGui(); + + void Start(); + + void ShowSettingsWindowRequest(); + void QuitApplicationRequest(); + int RespawnMainWindowRequest(); + int TrayIconLeftClick(); + +private: + CGuiMain *mGui; + CSMSClient *mSMSClient; + CProgramSettings *mProgramSettings; + CSettings mSettings; + CSystemTrayManager *mSysTrayMgr; + + +signals: + +public slots: +}; + +#endif // SYSTEMGUI_H diff --git a/Sources/SystemTrayManager.cpp b/Sources/SystemTrayManager.cpp new file mode 100644 index 0000000..eeacdb1 --- /dev/null +++ b/Sources/SystemTrayManager.cpp @@ -0,0 +1,96 @@ +#include "SystemTrayManager.h" +#include "SystemGui.h" +#include + +CSystemTrayManager::CSystemTrayManager() +{ + + mProgramHandle = 0; + + mTrayMenu = new QMenu(); + + connect(&mSystemTrayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(TrayIconActivated(QSystemTrayIcon::ActivationReason))); + connect(&mSystemTrayIcon,SIGNAL(messageClicked()),this,SLOT(TrayBaloonMessageClicked())); + connect(mTrayMenu,SIGNAL(triggered(QAction*)),this,SLOT(TrayMenuClicked(QAction*))); + + mShowSettingsGUIAction = mTrayMenu->addAction("Settings"); + mQuitAction = mTrayMenu->addAction("Quit SMS Client"); + mSystemTrayIcon.setIcon(QIcon("./Ico/sms.png")); + mSystemTrayIcon.setToolTip("SMS Client :)"); + mSystemTrayIcon.show(); + mSystemTrayIcon.setContextMenu(mTrayMenu); + +} +CSystemTrayManager::~CSystemTrayManager() +{ + mSystemTrayIcon.hide(); + delete mTrayMenu; +} + +void CSystemTrayManager::TrayBaloonMessageClicked() +{ + qDebug("Baloon message clicked"); +} + +void CSystemTrayManager::TrayIconActivated(QSystemTrayIcon::ActivationReason Reason) +{ + // qDebug("Tray icon activated %d",Reason); + // mSystemTrayIcon.showMessage("Icon Clicked","The icon has\nbeen clicked."); + switch(Reason) + { + case QSystemTrayIcon::Unknown: + { + break; + } + case QSystemTrayIcon::Context: + { + //qDebug("Context"); + break; + } + case QSystemTrayIcon::DoubleClick: + { + break; + } + case QSystemTrayIcon::Trigger: + { + //qDebug("Trigger"); + //mTrayMenu->popup(QCursor::pos()); + //mProgramHandle->RespawnMainWindowRequest(); + mProgramHandle->TrayIconLeftClick(); + break; + } + case QSystemTrayIcon::MiddleClick: + { + break; + } + } +} + +void CSystemTrayManager::TrayMenuClicked(QAction *Menu) +{ + if(Menu == mQuitAction) + { + qDebug("Quit"); + mProgramHandle->QuitApplicationRequest(); + } + else if(Menu == mShowSettingsGUIAction) + { + qDebug("Settings"); + mProgramHandle->ShowSettingsWindowRequest(); + } + +} + +int CSystemTrayManager::NewSMSMessagesPendingCount(int count) +{ + if(count == 0) + { + mSystemTrayIcon.setIcon(QIcon("./Ico/sms.png")); + } + else + { + mSystemTrayIcon.setIcon(QIcon("./Ico/sms_new.png")); + } + + return RET_OK; +} diff --git a/Sources/SystemTrayManager.h b/Sources/SystemTrayManager.h new file mode 100644 index 0000000..940621c --- /dev/null +++ b/Sources/SystemTrayManager.h @@ -0,0 +1,32 @@ +#ifndef CSYSTEMTRAYMANAGER_H +#define CSYSTEMTRAYMANAGER_H + +#include "GlobalDefine.h" +#include +#include +#include + +class CSystemGui; + +class CSystemTrayManager: public QObject +{ + Q_OBJECT +public: + CSystemTrayManager(); + virtual ~CSystemTrayManager(); + CSystemGui *mProgramHandle; + int NewSMSMessagesPendingCount(int count); + + +private: + QSystemTrayIcon mSystemTrayIcon; + QMenu *mTrayMenu; + QAction *mQuitAction, *mShowSettingsGUIAction; + +public slots: + void TrayIconActivated(QSystemTrayIcon::ActivationReason); + void TrayBaloonMessageClicked(); + void TrayMenuClicked(QAction*); +}; + +#endif // CSYSTEMTRAYMANAGER_H diff --git a/Sources/main.cpp b/Sources/main.cpp new file mode 100644 index 0000000..9b4f908 --- /dev/null +++ b/Sources/main.cpp @@ -0,0 +1,15 @@ +//#include "GuiMain.h" +#include "SystemGui.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + CSystemGui Program; + Program.Start(); +// CGuiMain w; +// w.show(); + + return a.exec(); +} diff --git a/SystemGui.pro b/SystemGui.pro new file mode 100644 index 0000000..79b7e52 --- /dev/null +++ b/SystemGui.pro @@ -0,0 +1,67 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2017-03-20T13:09:51 +# +#------------------------------------------------- + +QT += core gui network + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = SystemGui +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which as been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +INCLUDEPATH += Sources\ + Sources/SMSClient\ + Sources/Sprinkler\ + +SOURCES += \ + Sources/GuiMain.cpp \ + Sources/main.cpp \ + Sources/NetworkProtocol.cpp \ + Sources/ProgramSettings.cpp \ + Sources/SystemGui.cpp \ + Sources/SMSClient/SMSConversation.cpp \ + Sources/SMSClient/SMSDatabase.cpp \ + Sources/SMSClient/SMSGui.cpp \ + Sources/SMSClient/SMSMessage.cpp \ + Sources/SMSClient/SMSClient.cpp \ + Sources/SMSClient/SMSMasterCtrlInterface.cpp \ + Sources/MasterCtrlInterface.cpp \ + Sources/SMSClient/Contact.cpp \ + Sources/SMSClient/ContactRepository.cpp \ + Sources/SystemTrayManager.cpp \ + Sources/Sprinkler/SprinklerGui.cpp + +HEADERS += Sources/AbstractNetworkInterface.h \ + Sources/GuiMain.h \ + Sources/NetworkProtocol.h \ + Sources/ProgramSettings.h \ + Sources/ProtocolDefs.h \ + Sources/SystemGui.h \ + Sources/SMSClient/SMSConversation.h \ + Sources/SMSClient/SMSDatabase.h \ + Sources/SMSClient/SMSGui.h \ + Sources/SMSClient/SMSMessage.h \ + Sources/SMSClient/SMSClient.h \ + Sources/SMSClient/SMSMasterCtrlInterface.h \ + Sources/MasterCtrlInterface.h \ + Sources/SMSClient/Contact.h \ + Sources/SMSClient/ContactRepository.h \ + Sources/SystemTrayManager.h \ + Sources/Sprinkler/SprinklerGui.h + +FORMS += \ + SMSGui.ui \ + Sources/Sprinkler/SprinklerGui.ui diff --git a/ui_SMSGui.h b/ui_SMSGui.h new file mode 100644 index 0000000..7426bc7 --- /dev/null +++ b/ui_SMSGui.h @@ -0,0 +1,120 @@ +/******************************************************************************** +** Form generated from reading UI file 'SMSGui.ui' +** +** Created by: Qt User Interface Compiler version 5.5.0 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_SMSGUI_H +#define UI_SMSGUI_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_CSMSGui +{ +public: + QTextBrowser *mConversationText; + QFrame *mSMSEditFrame; + QGridLayout *gridLayout; + QPushButton *mSMSSendBtn; + QTextEdit *mSMSEdit; + QSpacerItem *horizontalSpacer; + QLabel *mSMSMessageStatsLabel; + QTreeWidget *mContactsTreeWidget; + QLabel *mContactPic; + QLabel *mContactName; + + void setupUi(QWidget *CSMSGui) + { + if (CSMSGui->objectName().isEmpty()) + CSMSGui->setObjectName(QStringLiteral("CSMSGui")); + CSMSGui->resize(803, 785); + QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + sizePolicy.setHorizontalStretch(0); + sizePolicy.setVerticalStretch(0); + sizePolicy.setHeightForWidth(CSMSGui->sizePolicy().hasHeightForWidth()); + CSMSGui->setSizePolicy(sizePolicy); + mConversationText = new QTextBrowser(CSMSGui); + mConversationText->setObjectName(QStringLiteral("mConversationText")); + mConversationText->setGeometry(QRect(0, 160, 481, 451)); + mSMSEditFrame = new QFrame(CSMSGui); + mSMSEditFrame->setObjectName(QStringLiteral("mSMSEditFrame")); + mSMSEditFrame->setGeometry(QRect(0, 620, 521, 121)); + mSMSEditFrame->setFrameShape(QFrame::StyledPanel); + mSMSEditFrame->setFrameShadow(QFrame::Raised); + gridLayout = new QGridLayout(mSMSEditFrame); + gridLayout->setObjectName(QStringLiteral("gridLayout")); + mSMSSendBtn = new QPushButton(mSMSEditFrame); + mSMSSendBtn->setObjectName(QStringLiteral("mSMSSendBtn")); + + gridLayout->addWidget(mSMSSendBtn, 3, 2, 1, 1); + + mSMSEdit = new QTextEdit(mSMSEditFrame); + mSMSEdit->setObjectName(QStringLiteral("mSMSEdit")); + + gridLayout->addWidget(mSMSEdit, 2, 0, 2, 1); + + horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + + gridLayout->addItem(horizontalSpacer, 3, 3, 1, 1); + + mSMSMessageStatsLabel = new QLabel(mSMSEditFrame); + mSMSMessageStatsLabel->setObjectName(QStringLiteral("mSMSMessageStatsLabel")); + mSMSMessageStatsLabel->setMinimumSize(QSize(200, 75)); + + gridLayout->addWidget(mSMSMessageStatsLabel, 2, 2, 1, 2); + + mContactsTreeWidget = new QTreeWidget(CSMSGui); + QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem(); + __qtreewidgetitem->setText(0, QStringLiteral("1")); + mContactsTreeWidget->setHeaderItem(__qtreewidgetitem); + mContactsTreeWidget->setObjectName(QStringLiteral("mContactsTreeWidget")); + mContactsTreeWidget->setGeometry(QRect(520, 160, 256, 471)); + mContactsTreeWidget->setIndentation(2); + mContactsTreeWidget->header()->setVisible(false); + mContactPic = new QLabel(CSMSGui); + mContactPic->setObjectName(QStringLiteral("mContactPic")); + mContactPic->setGeometry(QRect(10, 10, 141, 121)); + mContactName = new QLabel(CSMSGui); + mContactName->setObjectName(QStringLiteral("mContactName")); + mContactName->setGeometry(QRect(180, 20, 591, 101)); + + retranslateUi(CSMSGui); + + QMetaObject::connectSlotsByName(CSMSGui); + } // setupUi + + void retranslateUi(QWidget *CSMSGui) + { + CSMSGui->setWindowTitle(QApplication::translate("CSMSGui", "Form", 0)); + mSMSSendBtn->setText(QApplication::translate("CSMSGui", "Send", 0)); + mSMSMessageStatsLabel->setText(QApplication::translate("CSMSGui", "TextLabel", 0)); + mContactPic->setText(QApplication::translate("CSMSGui", "TextLabel", 0)); + mContactName->setText(QApplication::translate("CSMSGui", "TextLabel", 0)); + } // retranslateUi + +}; + +namespace Ui { + class CSMSGui: public Ui_CSMSGui {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_SMSGUI_H diff --git a/ui_SprinklerGui.h b/ui_SprinklerGui.h new file mode 100644 index 0000000..d79a24c --- /dev/null +++ b/ui_SprinklerGui.h @@ -0,0 +1,55 @@ +/******************************************************************************** +** Form generated from reading UI file 'SprinklerGui.ui' +** +** Created by: Qt User Interface Compiler version 5.5.0 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_SPRINKLERGUI_H +#define UI_SPRINKLERGUI_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class Ui_CSprinklerGui +{ +public: + QLabel *label; + + void setupUi(QWidget *CSprinklerGui) + { + if (CSprinklerGui->objectName().isEmpty()) + CSprinklerGui->setObjectName(QStringLiteral("CSprinklerGui")); + CSprinklerGui->resize(1047, 560); + label = new QLabel(CSprinklerGui); + label->setObjectName(QStringLiteral("label")); + label->setGeometry(QRect(0, -10, 201, 51)); + + retranslateUi(CSprinklerGui); + + QMetaObject::connectSlotsByName(CSprinklerGui); + } // setupUi + + void retranslateUi(QWidget *CSprinklerGui) + { + CSprinklerGui->setWindowTitle(QApplication::translate("CSprinklerGui", "Form", 0)); + label->setText(QApplication::translate("CSprinklerGui", "Sprinklers", 0)); + } // retranslateUi + +}; + +namespace Ui { + class CSprinklerGui: public Ui_CSprinklerGui {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_SPRINKLERGUI_H