";
s += m_szTransferLog;
@@ -1782,36 +1907,43 @@ QString DccFileTransfer::tipText()
void DccFileTransfer::init()
{
- if(g_pDccFileTransfers)return;
+ if(g_pDccFileTransfers)
+ return;
g_pDccFileTransfers = new KviPointerList;
g_pDccFileTransfers->setAutoDelete(false);
QPixmap * pix = g_pIconManager->getImage("kvi_dccfiletransfericons.png", false);
- if(pix)g_pDccFileTransferIcon = new QPixmap(*pix);
- else g_pDccFileTransferIcon = 0;
+ if(pix)
+ g_pDccFileTransferIcon = new QPixmap(*pix);
+ else
+ g_pDccFileTransferIcon = 0;
}
void DccFileTransfer::done()
{
- if(!g_pDccFileTransfers)return;
+ if(!g_pDccFileTransfers)
+ return;
while(DccFileTransfer * t = g_pDccFileTransfers->first())
delete t;
delete g_pDccFileTransfers;
g_pDccFileTransfers = 0;
- if(g_pDccFileTransferIcon)delete g_pDccFileTransferIcon;
+ if(g_pDccFileTransferIcon)
+ delete g_pDccFileTransferIcon;
g_pDccFileTransferIcon = 0;
}
unsigned int DccFileTransfer::transferCount()
{
- if(!g_pDccFileTransfers)return 0;
+ if(!g_pDccFileTransfers)
+ return 0;
return g_pDccFileTransfers->count();
}
-DccFileTransfer * DccFileTransfer::nonFailedTransferWithLocalFileName(const QString &szLocalFileName)
+DccFileTransfer * DccFileTransfer::nonFailedTransferWithLocalFileName(const QString & szLocalFileName)
{
- if(!g_pDccFileTransfers)return 0;
- for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next())
+ if(!g_pDccFileTransfers)
+ return 0;
+ for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next())
{
#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
// on windows the file names are case insensitive
@@ -1829,62 +1961,67 @@ DccFileTransfer * DccFileTransfer::nonFailedTransferWithLocalFileName(const QStr
unsigned int DccFileTransfer::runningTransfersCount()
{
- if(!g_pDccFileTransfers)return 0;
+ if(!g_pDccFileTransfers)
+ return 0;
unsigned int cnt = 0;
- for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next())
+ for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next())
{
- if(t->active())cnt++;
+ if(t->active())
+ cnt++;
}
return cnt;
}
-bool DccFileTransfer::handleResumeAccepted(const char * filename,const char * port,const char * szZeroPortTag)
+bool DccFileTransfer::handleResumeAccepted(const char * filename, const char * port, const char * szZeroPortTag)
{
- if(!g_pDccFileTransfers)return false;
+ if(!g_pDccFileTransfers)
+ return false;
- for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next())
+ for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next())
{
- if(t->resumeAccepted(filename,port,szZeroPortTag))return true;
+ if(t->resumeAccepted(filename, port, szZeroPortTag))
+ return true;
}
return false;
}
-bool DccFileTransfer::handleResumeRequest(const char * filename,const char * port,quint64 filePos)
+bool DccFileTransfer::handleResumeRequest(const char * filename, const char * port, quint64 filePos)
{
if(!g_pDccFileTransfers)
return false;
- for(DccFileTransfer * t = g_pDccFileTransfers->first();t;t = g_pDccFileTransfers->next())
+ for(DccFileTransfer * t = g_pDccFileTransfers->first(); t; t = g_pDccFileTransfers->next())
{
- if(t->doResume(filename,port,filePos))
+ if(t->doResume(filename, port, filePos))
return true;
}
return false;
}
-void DccFileTransfer::outputAndLog(const QString &s)
+void DccFileTransfer::outputAndLog(const QString & s)
{
KviWindow * out = transferWindow();
addToTransferLog(s);
- if(out)out->output(KVI_OUT_DCCMSG,"[%Q]: %Q",&m_szTransferIdString,&s);
+ if(out)
+ out->output(KVI_OUT_DCCMSG, "[%Q]: %Q", &m_szTransferIdString, &s);
}
-void DccFileTransfer::outputAndLog(int msgtype,const QString &s)
+void DccFileTransfer::outputAndLog(int msgtype, const QString & s)
{
KviWindow * out = transferWindow();
addToTransferLog(s);
- if(out)out->output(msgtype,"[%Q]: %Q",&m_szTransferIdString,&s);
+ if(out)
+ out->output(msgtype, "[%Q]: %Q", &m_szTransferIdString, &s);
}
-
-void DccFileTransfer::addToTransferLog(const QString &s)
+void DccFileTransfer::addToTransferLog(const QString & s)
{
QDateTime dt = QDateTime::currentDateTime();
QString ts;
- ts.sprintf("[%4d.%2d.%2d %2d:%2d:%2d] ",dt.date().year(),dt.date().month(),dt.date().day(),dt.time().hour(),dt.time().minute(),dt.time().second());
- m_szTransferLog += ts+s;
+ ts.sprintf("[%4d.%2d.%2d %2d:%2d:%2d] ", dt.date().year(), dt.date().month(), dt.date().day(), dt.time().hour(), dt.time().minute(), dt.time().second());
+ m_szTransferLog += ts + s;
m_szTransferLog += " ";
}
@@ -1893,22 +2030,22 @@ void DccFileTransfer::connectionInProgress()
if(m_pDescriptor->bActive)
{
// ACTIVE CONNECTION
-// if((kvi_strEqualCS(m_szDccType.ptr(), "RECV")) || (kvi_strEqualCS(m_szDccType.ptr(),"TRECV")))
-// {
-// // FIXME: that's not true!... we're NOT connected here
-// if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCGetConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr()));
-// } else {
-// if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCSendConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr()));
-// }
-//
- m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2","dcc").arg(m_pDescriptor->szIp, m_pDescriptor->szPort);
+ // if((kvi_strEqualCS(m_szDccType.ptr(), "RECV")) || (kvi_strEqualCS(m_szDccType.ptr(),"TRECV")))
+ // {
+ // // FIXME: that's not true!... we're NOT connected here
+ // if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCGetConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr()));
+ // } else {
+ // if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCSendConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr()));
+ // }
+ //
+ m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2", "dcc").arg(m_pDescriptor->szIp, m_pDescriptor->szPort);
outputAndLog(m_szStatusString);
displayUpdate();
return;
}
// PASSIVE CONNECTION
- m_szStatusString = __tr2qs_ctx("Listening on interface %1 port %2","dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort());
+ m_szStatusString = __tr2qs_ctx("Listening on interface %1 port %2", "dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort());
outputAndLog(m_szStatusString);
if(m_pDescriptor->bSendRequest)
@@ -1917,7 +2054,9 @@ void DccFileTransfer::connectionInProgress()
if(!m_pDescriptor->szFakeIp.isEmpty())
{
ip = m_pDescriptor->szFakeIp;
- } else {
+ }
+ else
+ {
ip = m_pDescriptor->szListenIp;
if(KVI_OPTION_BOOL(KviOption_boolDccGuessIpFromServerWhenLocalIsUnroutable))
@@ -1931,67 +2070,78 @@ void DccFileTransfer::connectionInProgress()
if(!tmp.isEmpty())
{
ip = tmp;
- outputAndLog(__tr2qs_ctx("The local IP address is private, determining from IRC server: %1","dcc").arg(ip));
- } else {
- outputAndLog(__tr2qs_ctx("The local IP address is private, but unable to determine it from the IRC server","dcc"));
+ outputAndLog(__tr2qs_ctx("The local IP address is private, determining from IRC server: %1", "dcc").arg(ip));
}
- } else {
- outputAndLog(__tr2qs_ctx("The local IP address is private, but have no IRC server to determine it from","dcc"));
+ else
+ {
+ outputAndLog(__tr2qs_ctx("The local IP address is private, but unable to determine it from the IRC server", "dcc"));
+ }
+ }
+ else
+ {
+ outputAndLog(__tr2qs_ctx("The local IP address is private, but have no IRC server to determine it from", "dcc"));
}
}
}
}
- KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort();
+ KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort();
//#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)"
struct in_addr a;
- if(KviNetUtils::stringIpToBinaryIp(ip,&a))ip.setNum(htonl(a.s_addr));
+ if(KviNetUtils::stringIpToBinaryIp(ip, &a))
+ ip.setNum(htonl(a.s_addr));
QString tmp = m_pDescriptor->szFileName;
// just to be sure
- KviQString::cutToLast(tmp,'/');
- KviQString::cutToLast(tmp,'\\');
+ KviQString::cutToLast(tmp, '/');
+ KviQString::cutToLast(tmp, '\\');
QString fName;
// BUG-TO-BUG mIrc compatibility
if(KVI_OPTION_BOOL(KviOption_boolDCCFileTransferReplaceOutgoingSpacesWithUnderscores))
- tmp.replace(" ","_");
+ tmp.replace(" ", "_");
- KviIrcServerParser::encodeCtcpParameter(tmp.toUtf8().data(),fName);
+ KviIrcServerParser::encodeCtcpParameter(tmp.toUtf8().data(), fName);
// Zero port requests want DCC SEND as back-request
KviCString szReq;
if(m_pDescriptor->isZeroPortRequest())
{
szReq = "SEND";
- if(m_pDescriptor->bIsTdcc) szReq.prepend("T");
+ if(m_pDescriptor->bIsTdcc)
+ szReq.prepend("T");
#ifdef COMPILE_SSL_SUPPORT
- if(m_pDescriptor->bIsSSL) szReq.prepend("S");
+ if(m_pDescriptor->bIsSSL)
+ szReq.prepend("S");
#endif
m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %s %s %s %s%c",
- m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
- 0x01,
- m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(),
- m_pDescriptor->console()->connection()->encodeText(fName).data(),
- ip.toUtf8().data(),port.ptr(),
- m_pDescriptor->szFileSize.toUtf8().data(),m_pDescriptor->zeroPortRequestTag(),0x01);
- } else {
+ m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
+ 0x01,
+ m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(),
+ m_pDescriptor->console()->connection()->encodeText(fName).data(),
+ ip.toUtf8().data(), port.ptr(),
+ m_pDescriptor->szFileSize.toUtf8().data(), m_pDescriptor->zeroPortRequestTag(), 0x01);
+ }
+ else
+ {
szReq = m_szDccType;
m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC %s %s %s %s %Q%c",
- m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
- 0x01,
- m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(),
- m_pDescriptor->console()->connection()->encodeText(fName).data(),
- ip.toUtf8().data(),port.ptr(),
- &(m_pDescriptor->szLocalFileSize),0x01);
+ m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
+ 0x01,
+ m_pDescriptor->console()->connection()->encodeText(szReq.ptr()).data(),
+ m_pDescriptor->console()->connection()->encodeText(fName).data(),
+ ip.toUtf8().data(), port.ptr(),
+ &(m_pDescriptor->szLocalFileSize), 0x01);
}
- outputAndLog(__tr2qs_ctx("Sent DCC %1 request to %2, waiting for remote client to connect...","dcc").arg(szReq.ptr(), m_pDescriptor->szNick));
- } else {
- outputAndLog(__tr2qs_ctx("DCC %1 request not sent, awaiting manual connection","dcc").arg(m_szDccType.ptr()));
+ outputAndLog(__tr2qs_ctx("Sent DCC %1 request to %2, waiting for remote client to connect...", "dcc").arg(szReq.ptr(), m_pDescriptor->szNick));
+ }
+ else
+ {
+ outputAndLog(__tr2qs_ctx("DCC %1 request not sent, awaiting manual connection", "dcc").arg(m_szDccType.ptr()));
}
- KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferConnectionInProgress,eventWindow(),m_pDescriptor->idString());
+ KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferConnectionInProgress, eventWindow(), m_pDescriptor->idString());
displayUpdate();
}
@@ -1999,19 +2149,19 @@ void DccFileTransfer::connectionInProgress()
void DccFileTransfer::startingSSLHandshake()
{
#ifdef COMPILE_SSL_SUPPORT
- outputAndLog(KVI_OUT_SSL,__tr2qs_ctx("Low-level transport connection established","dcc"));
- outputAndLog(KVI_OUT_SSL,__tr2qs_ctx("Starting Secure Socket Layer handshake","dcc"));
+ outputAndLog(KVI_OUT_SSL, __tr2qs_ctx("Low-level transport connection established", "dcc"));
+ outputAndLog(KVI_OUT_SSL, __tr2qs_ctx("Starting Secure Socket Layer handshake", "dcc"));
#endif
}
void DccFileTransfer::sslError(const char * msg)
{
#ifdef COMPILE_SSL_SUPPORT
- outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("[SSL ERROR]: %1","dcc").arg(msg));
+ outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("[SSL ERROR]: %1", "dcc").arg(msg));
#endif
}
-bool DccFileTransfer::event(QEvent *e)
+bool DccFileTransfer::event(QEvent * e)
{
if(e->type() == KVI_THREAD_EVENT)
{
@@ -2023,20 +2173,20 @@ bool DccFileTransfer::event(QEvent *e)
QString szErrorString = KviError::getDescription(*pError);
delete pError;
if(m_pDescriptor->bRecvFile)
- g_pApp->fileDownloadTerminated(false,m_pDescriptor->szFileName.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szNick.toUtf8().data(),szErrorString.toUtf8().data());
+ g_pApp->fileDownloadTerminated(false, m_pDescriptor->szFileName.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szNick.toUtf8().data(), szErrorString.toUtf8().data());
- m_szStatusString = __tr2qs_ctx("Transfer failed: ","dcc");
+ m_szStatusString = __tr2qs_ctx("Transfer failed: ", "dcc");
m_szStatusString += szErrorString;
m_eGeneralStatus = Failure;
m_tTransferEndTime = kvi_unixTime();
KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed,
- eventWindow(),
- szErrorString,
- (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()),
- m_pDescriptor->idString());
+ eventWindow(),
+ szErrorString,
+ (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()),
+ m_pDescriptor->idString());
- outputAndLog(KVI_OUT_DCCERROR,m_szStatusString);
+ outputAndLog(KVI_OUT_DCCERROR, m_szStatusString);
displayUpdate();
return true;
}
@@ -2047,13 +2197,15 @@ bool DccFileTransfer::event(QEvent *e)
// File Upload/Download terminated, or something like this
if(KVI_OPTION_BOOL(KviOption_boolNotifyDccSendSuccessInConsole))
{
- KviConsoleWindow *c;
- if(!g_pApp->windowExists(m_pDescriptor->console())) c=g_pApp->activeConsole();
- else c=m_pDescriptor->console();
- c->output(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC %s transfer with %Q@%Q:%Q completed: \r![!dbl]play $0\r%s\r","dcc"),
- m_pDescriptor->bIsTdcc ? (m_pDescriptor->bRecvFile ? "TRECV" : "TSEND") : (m_pDescriptor->bRecvFile ? "RECV" : "SEND"),
- &(m_pDescriptor->szNick),&(m_pDescriptor->szIp),&(m_pDescriptor->szPort),
- &(m_pDescriptor->szLocalFileName));
+ KviConsoleWindow * c;
+ if(!g_pApp->windowExists(m_pDescriptor->console()))
+ c = g_pApp->activeConsole();
+ else
+ c = m_pDescriptor->console();
+ c->output(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC %s transfer with %Q@%Q:%Q completed: \r![!dbl]play $0\r%s\r", "dcc"),
+ m_pDescriptor->bIsTdcc ? (m_pDescriptor->bRecvFile ? "TRECV" : "TSEND") : (m_pDescriptor->bRecvFile ? "RECV" : "SEND"),
+ &(m_pDescriptor->szNick), &(m_pDescriptor->szIp), &(m_pDescriptor->szPort),
+ &(m_pDescriptor->szLocalFileName));
}
/*
// Also add an optional message to the notifier, unless it is an AVATAR download!
@@ -2063,39 +2215,42 @@ bool DccFileTransfer::event(QEvent *e)
g_pApp->notifierMessage(0,KVI_SMALLICON_DCCMSG,szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime));
}
*/
- if(m_pDescriptor->bRecvFile)g_pApp->fileDownloadTerminated(true,m_pDescriptor->szFileName.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szNick.toUtf8().data());
- m_szStatusString = __tr2qs_ctx("Transfer completed","dcc");
+ if(m_pDescriptor->bRecvFile)
+ g_pApp->fileDownloadTerminated(true, m_pDescriptor->szFileName.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szNick.toUtf8().data());
+ m_szStatusString = __tr2qs_ctx("Transfer completed", "dcc");
outputAndLog(m_szStatusString);
m_eGeneralStatus = Success;
m_tTransferEndTime = kvi_unixTime();
- if (m_pResumeTimer) delete m_pResumeTimer;
+ if(m_pResumeTimer)
+ delete m_pResumeTimer;
KVS_TRIGGER_EVENT_2(KviEvent_OnDCCFileTransferSuccess,
- eventWindow(),
- (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()),
- m_pDescriptor->idString());
+ eventWindow(),
+ (kvs_int_t)(m_pSlaveRecvThread ? m_pSlaveRecvThread->receivedBytes() : m_pSlaveSendThread->sentBytes()),
+ m_pDescriptor->idString());
displayUpdate();
- if(KVI_OPTION_BOOL(KviOption_boolAutoCloseDccSendOnSuccess))die();
+ if(KVI_OPTION_BOOL(KviOption_boolAutoCloseDccSendOnSuccess))
+ die();
return true;
}
break;
case KVI_DCC_THREAD_EVENT_MESSAGE:
{
KviCString * str = ((KviThreadDataEvent *)e)->getData();
- outputAndLog(QString(__tr_no_xgettext_ctx(str->ptr(),"dcc")));
+ outputAndLog(QString(__tr_no_xgettext_ctx(str->ptr(), "dcc")));
delete str;
return true;
}
break;
default:
- qDebug("Invalid event type %d received",((KviThreadEvent *)e)->id());
- break;
+ qDebug("Invalid event type %d received", ((KviThreadEvent *)e)->id());
+ break;
}
}
-//#warning "Remove this!"
-// if(e->type() == QEvent::Close)qDebug("Close event received");
+ //#warning "Remove this!"
+ // if(e->type() == QEvent::Close)qDebug("Close event received");
return KviFileTransfer::event(e);
}
@@ -2103,23 +2258,23 @@ void DccFileTransfer::handleMarshalError(KviError::Code eError)
{
QString szErr = KviError::getDescription(eError);
m_eGeneralStatus = Failure;
- m_szStatusString = __tr2qs_ctx("Transfer failed: ","dcc");
+ m_szStatusString = __tr2qs_ctx("Transfer failed: ", "dcc");
m_szStatusString += szErr;
outputAndLog(m_szStatusString);
- KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed,eventWindow(),szErr,(kvs_int_t)0,m_pDescriptor->idString());
+ KVS_TRIGGER_EVENT_3(KviEvent_OnDCCFileTransferFailed, eventWindow(), szErr, (kvs_int_t)0, m_pDescriptor->idString());
displayUpdate();
}
void DccFileTransfer::connected()
{
- outputAndLog(__tr2qs_ctx("Connected to %1:%2","dcc").arg(m_pMarshal->remoteIp(), m_pMarshal->remotePort()));
- outputAndLog(__tr2qs_ctx("Local end is %1:%2","dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort()));
+ outputAndLog(__tr2qs_ctx("Connected to %1:%2", "dcc").arg(m_pMarshal->remoteIp(), m_pMarshal->remotePort()));
+ outputAndLog(__tr2qs_ctx("Local end is %1:%2", "dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort()));
m_tTransferStartTime = kvi_unixTime();
if(!(m_pDescriptor->bActive))
{
- m_pDescriptor->szIp = m_pMarshal->remoteIp();
+ m_pDescriptor->szIp = m_pMarshal->remoteIp();
m_pDescriptor->szPort = m_pMarshal->remotePort();
m_pDescriptor->szHost = m_pMarshal->remoteIp();
}
@@ -2127,18 +2282,19 @@ void DccFileTransfer::connected()
if(m_pDescriptor->bRecvFile)
{
KviDccRecvThreadOptions * o = new KviDccRecvThreadOptions;
- o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data();
+ o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data();
bool bOk;
- o->uTotalFileSize = m_pDescriptor->szFileSize.toULongLong(&bOk);
- if(!bOk)o->uTotalFileSize = 0;
- o->bResume = m_pDescriptor->bResume;
+ o->uTotalFileSize = m_pDescriptor->szFileSize.toULongLong(&bOk);
+ if(!bOk)
+ o->uTotalFileSize = 0;
+ o->bResume = m_pDescriptor->bResume;
o->iIdleStepLengthInMSec = KVI_OPTION_BOOL(KviOption_boolDccSendForceIdleStep) ? KVI_OPTION_UINT(KviOption_uintDccSendIdleStepInMSec) : 0;
- o->bIsTdcc = m_pDescriptor->bIsTdcc;
- o->bSendZeroAck = KVI_OPTION_BOOL(KviOption_boolSendZeroAckInDccRecv);
- o->bSend64BitAck = KVI_OPTION_BOOL(KviOption_boolSend64BitAckInDccRecv);
- o->bNoAcks = m_pDescriptor->bNoAcks;
- o->uMaxBandwidth = m_uMaxBandwidth;
- m_pSlaveRecvThread = new DccRecvThread(this,m_pMarshal->releaseSocket(),o);
+ o->bIsTdcc = m_pDescriptor->bIsTdcc;
+ o->bSendZeroAck = KVI_OPTION_BOOL(KviOption_boolSendZeroAckInDccRecv);
+ o->bSend64BitAck = KVI_OPTION_BOOL(KviOption_boolSend64BitAckInDccRecv);
+ o->bNoAcks = m_pDescriptor->bNoAcks;
+ o->uMaxBandwidth = m_uMaxBandwidth;
+ m_pSlaveRecvThread = new DccRecvThread(this, m_pMarshal->releaseSocket(), o);
#ifdef COMPILE_SSL_SUPPORT
KviSSL * s = m_pMarshal->releaseSSL();
@@ -2148,20 +2304,24 @@ void DccFileTransfer::connected()
}
#endif
m_pSlaveRecvThread->start();
- } else {
+ }
+ else
+ {
KviDccSendThreadOptions * o = new KviDccSendThreadOptions;
- o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data();
- o->bFastSend = KVI_OPTION_BOOL(KviOption_boolUseFastDccSend);
+ o->szFileName = m_pDescriptor->szLocalFileName.toUtf8().data();
+ o->bFastSend = KVI_OPTION_BOOL(KviOption_boolUseFastDccSend);
o->iIdleStepLengthInMSec = KVI_OPTION_BOOL(KviOption_boolDccSendForceIdleStep) ? KVI_OPTION_UINT(KviOption_uintDccSendIdleStepInMSec) : 0;
bool bOk;
- o->bIsTdcc = m_pDescriptor->bIsTdcc;
- o->uStartPosition = m_pDescriptor->szFileSize.toULongLong(&bOk);
- if(!bOk) o->uStartPosition = 0;
- o->iPacketSize = KVI_OPTION_UINT(KviOption_uintDccSendPacketSize);
- if(o->iPacketSize < 32)o->iPacketSize = 32;
- o->uMaxBandwidth = m_uMaxBandwidth;
- o->bNoAcks = m_pDescriptor->bNoAcks;
- m_pSlaveSendThread = new DccSendThread(this,m_pMarshal->releaseSocket(),o);
+ o->bIsTdcc = m_pDescriptor->bIsTdcc;
+ o->uStartPosition = m_pDescriptor->szFileSize.toULongLong(&bOk);
+ if(!bOk)
+ o->uStartPosition = 0;
+ o->iPacketSize = KVI_OPTION_UINT(KviOption_uintDccSendPacketSize);
+ if(o->iPacketSize < 32)
+ o->iPacketSize = 32;
+ o->uMaxBandwidth = m_uMaxBandwidth;
+ o->bNoAcks = m_pDescriptor->bNoAcks;
+ m_pSlaveSendThread = new DccSendThread(this, m_pMarshal->releaseSocket(), o);
#ifdef COMPILE_SSL_SUPPORT
KviSSL * s = m_pMarshal->releaseSSL();
if(s)
@@ -2173,33 +2333,32 @@ void DccFileTransfer::connected()
}
m_eGeneralStatus = Transferring;
- m_szStatusString = __tr2qs_ctx("Transferring data","dcc");
+ m_szStatusString = __tr2qs_ctx("Transferring data", "dcc");
- KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferBegin,eventWindow(),m_pDescriptor->idString());
+ KVS_TRIGGER_EVENT_1(KviEvent_OnDCCFileTransferBegin, eventWindow(), m_pDescriptor->idString());
outputAndLog(m_szStatusString);
displayUpdate();
}
-bool DccFileTransfer::resumeAccepted(const char *filename,const char *port,const char *szZeroPortTag)
+bool DccFileTransfer::resumeAccepted(const char * filename, const char * port, const char * szZeroPortTag)
{
- if(!(kvi_strEqualCI(filename,m_pDescriptor->szFileName.toUtf8().data()) || KVI_OPTION_BOOL(KviOption_boolAcceptBrokenFileNameDccResumeRequests)))
+ if(!(kvi_strEqualCI(filename, m_pDescriptor->szFileName.toUtf8().data()) || KVI_OPTION_BOOL(KviOption_boolAcceptBrokenFileNameDccResumeRequests)))
return false;
- if(!(kvi_strEqualCI(port,m_pDescriptor->szPort.toUtf8().data()) &&
- (!m_pSlaveRecvThread) && m_pDescriptor->bResume && m_pDescriptor->bRecvFile && m_pResumeTimer))
+ if(!(kvi_strEqualCI(port, m_pDescriptor->szPort.toUtf8().data()) && (!m_pSlaveRecvThread) && m_pDescriptor->bResume && m_pDescriptor->bRecvFile && m_pResumeTimer))
return false;
- if(kvi_strEqualCI(port,"0"))
+ if(kvi_strEqualCI(port, "0"))
{
- if(!kvi_strEqualCI(szZeroPortTag,m_pDescriptor->zeroPortRequestTag()))
+ if(!kvi_strEqualCI(szZeroPortTag, m_pDescriptor->zeroPortRequestTag()))
return false;
}
delete m_pResumeTimer;
m_pResumeTimer = 0;
- outputAndLog(__tr2qs_ctx("RESUME accepted, transfer will begin at position %1","dcc").arg(m_pDescriptor->szLocalFileSize));
+ outputAndLog(__tr2qs_ctx("RESUME accepted, transfer will begin at position %1", "dcc").arg(m_pDescriptor->szLocalFileSize));
listenOrConnect();
@@ -2218,7 +2377,7 @@ bool DccFileTransfer::resumeAccepted(const char *filename,const char *port,const
return true;
}
-bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 filePos)
+bool DccFileTransfer::doResume(const char * filename, const char * port, quint64 filePos)
{
if(m_pSlaveRecvThread)
return false; // we're already receiving stuff...
@@ -2228,8 +2387,8 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f
if(m_pDescriptor->bRecvFile)
return false; // we're receiving... can't resume anything
- bool bFileNameMatches = KviQString::equalCI(filename,m_pDescriptor->szFileName);
- bool bPortMatches = KviQString::equalCI(port,m_pMarshal->dccPort());
+ bool bFileNameMatches = KviQString::equalCI(filename, m_pDescriptor->szFileName);
+ bool bPortMatches = KviQString::equalCI(port, m_pMarshal->dccPort());
if(!bPortMatches)
{
@@ -2243,7 +2402,7 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f
// hmm.. try to accept a mismatched port request
if(_OUTPUT_VERBOSE)
- outputAndLog(KVI_OUT_DCCMSG,__tr2qs_ctx("Processing RESUME request with mismatched port (%1)","dcc").arg(port));
+ outputAndLog(KVI_OUT_DCCMSG, __tr2qs_ctx("Processing RESUME request with mismatched port (%1)", "dcc").arg(port));
}
// port matches
@@ -2260,16 +2419,15 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f
{
if(_OUTPUT_VERBOSE)
outputAndLog(
- KVI_OUT_DCCMSG,
- __tr2qs_ctx("Invalid RESUME request: invalid file name (got '%1' but should be '%2')","dcc")
- .arg(filename)
- .arg(m_pDescriptor->szFileName)
- );
+ KVI_OUT_DCCMSG,
+ __tr2qs_ctx("Invalid RESUME request: invalid file name (got '%1' but should be '%2')", "dcc")
+ .arg(filename)
+ .arg(m_pDescriptor->szFileName));
return false; // bad file name
}
if(_OUTPUT_VERBOSE)
- outputAndLog(KVI_OUT_DCCMSG,__tr2qs_ctx("Processing RESUME request with broken filename (%1)","dcc").arg(filename));
+ outputAndLog(KVI_OUT_DCCMSG, __tr2qs_ctx("Processing RESUME request with broken filename (%1)", "dcc").arg(filename));
}
bool bOk;
@@ -2278,31 +2436,30 @@ bool DccFileTransfer::doResume(const char * filename,const char * port,quint64 f
if(!bOk)
{
// ops...internal error
- outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("Internal error in RESUME request","dcc"));
+ outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("Internal error in RESUME request", "dcc"));
return false;
}
if(iLocalFileSize <= filePos)
{
- outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("Invalid RESUME request: position %1 is larger than file size","dcc").arg(filePos));
+ outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("Invalid RESUME request: position %1 is larger than file size", "dcc").arg(filePos));
return false;
}
- outputAndLog(KVI_OUT_DCCERROR,__tr2qs_ctx("Accepting RESUME request, transfer will begin at position %1","dcc").arg(filePos));
+ outputAndLog(KVI_OUT_DCCERROR, __tr2qs_ctx("Accepting RESUME request, transfer will begin at position %1", "dcc").arg(filePos));
m_pDescriptor->szFileSize.setNum(filePos);
KviCString szBuffy;
- KviIrcServerParser::encodeCtcpParameter(filename,szBuffy);
+ KviIrcServerParser::encodeCtcpParameter(filename, szBuffy);
m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC ACCEPT %s %s %s%c",
- m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
- 0x01,
- m_pDescriptor->console()->connection()->encodeText(szBuffy.ptr()).data(),
- port,
- m_pDescriptor->console()->connection()->encodeText(QString::number(filePos)).data(),
- 0x01
- );
+ m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
+ 0x01,
+ m_pDescriptor->console()->connection()->encodeText(szBuffy.ptr()).data(),
+ port,
+ m_pDescriptor->console()->connection()->encodeText(QString::number(filePos)).data(),
+ 0x01);
return true;
}
@@ -2312,56 +2469,57 @@ DccThread * DccFileTransfer::getSlaveThread()
if(m_pDescriptor->bRecvFile)
{
return m_pSlaveRecvThread;
- } else {
+ }
+ else
+ {
return m_pSlaveSendThread;
}
}
-
-DccFileTransferBandwidthDialog::DccFileTransferBandwidthDialog(QWidget * pParent,DccFileTransfer * t)
-: QDialog(pParent)
+DccFileTransferBandwidthDialog::DccFileTransferBandwidthDialog(QWidget * pParent, DccFileTransfer * t)
+ : QDialog(pParent)
{
QGridLayout * g = new QGridLayout(this);
m_pTransfer = t;
int iVal = m_pTransfer->bandwidthLimit();
- QString szText = __tr2qs_ctx("Configure Bandwidth for DCC Transfer %1","dcc").arg(t->id());
+ QString szText = __tr2qs_ctx("Configure Bandwidth for DCC Transfer %1", "dcc").arg(t->id());
setWindowTitle(szText);
- szText = t->isFileUpload() ? __tr2qs_ctx("Limit upload bandwidth to:","dcc") : __tr2qs_ctx("Limit download bandwidth to:","dcc");
+ szText = t->isFileUpload() ? __tr2qs_ctx("Limit upload bandwidth to:", "dcc") : __tr2qs_ctx("Limit download bandwidth to:", "dcc");
- m_pEnableLimitCheck = new QCheckBox(szText,this);
- g->addWidget(m_pEnableLimitCheck,0,0);
+ m_pEnableLimitCheck = new QCheckBox(szText, this);
+ g->addWidget(m_pEnableLimitCheck, 0, 0);
m_pEnableLimitCheck->setChecked((iVal >= 0) && (iVal < MAX_DCC_BANDWIDTH_LIMIT));
m_pLimitBox = new QSpinBox(this);
m_pLimitBox->setMinimum(0);
- m_pLimitBox->setMaximum(MAX_DCC_BANDWIDTH_LIMIT-1);
+ m_pLimitBox->setMaximum(MAX_DCC_BANDWIDTH_LIMIT - 1);
m_pLimitBox->setSingleStep(1);
m_pLimitBox->setEnabled((iVal >= 0) && (iVal < MAX_DCC_BANDWIDTH_LIMIT));
- connect(m_pEnableLimitCheck,SIGNAL(toggled(bool)),m_pLimitBox,SLOT(setEnabled(bool)));
- g->addWidget(m_pLimitBox,0,1,1,2);
+ connect(m_pEnableLimitCheck, SIGNAL(toggled(bool)), m_pLimitBox, SLOT(setEnabled(bool)));
+ g->addWidget(m_pLimitBox, 0, 1, 1, 2);
szText = " ";
- szText += __tr2qs_ctx("bytes/sec","dcc");
+ szText += __tr2qs_ctx("bytes/sec", "dcc");
m_pLimitBox->setSuffix(szText);
m_pLimitBox->setValue(iVal < MAX_DCC_BANDWIDTH_LIMIT ? iVal : 0);
- QPushButton * pb = new QPushButton(__tr2qs_ctx("OK","dcc"),this);
- connect(pb,SIGNAL(clicked()),this,SLOT(okClicked()));
+ QPushButton * pb = new QPushButton(__tr2qs_ctx("OK", "dcc"), this);
+ connect(pb, SIGNAL(clicked()), this, SLOT(okClicked()));
pb->setMinimumWidth(80);
- g->addWidget(pb,2,2);
+ g->addWidget(pb, 2, 2);
- pb = new QPushButton(__tr2qs_ctx("Cancel","dcc"),this);
- connect(pb,SIGNAL(clicked()),this,SLOT(cancelClicked()));
+ pb = new QPushButton(__tr2qs_ctx("Cancel", "dcc"), this);
+ connect(pb, SIGNAL(clicked()), this, SLOT(cancelClicked()));
pb->setMinimumWidth(80);
- g->addWidget(pb,2,1);
+ g->addWidget(pb, 2, 1);
- g->setColumnStretch(0,1);
- g->setRowStretch(1,1);
+ g->setColumnStretch(0, 1);
+ g->setRowStretch(1, 1);
}
DccFileTransferBandwidthDialog::~DccFileTransferBandwidthDialog()
@@ -2374,8 +2532,10 @@ void DccFileTransferBandwidthDialog::okClicked()
if(m_pEnableLimitCheck->isChecked())
{
iVal = m_pLimitBox->value();
- if(iVal < 0)iVal = MAX_DCC_BANDWIDTH_LIMIT;
- if(iVal > MAX_DCC_BANDWIDTH_LIMIT)iVal = MAX_DCC_BANDWIDTH_LIMIT;
+ if(iVal < 0)
+ iVal = MAX_DCC_BANDWIDTH_LIMIT;
+ if(iVal > MAX_DCC_BANDWIDTH_LIMIT)
+ iVal = MAX_DCC_BANDWIDTH_LIMIT;
}
m_pTransfer->setBandwidthLimit(iVal);
delete this;
diff --git a/src/modules/dcc/DccFileTransfer.h b/src/modules/dcc/DccFileTransfer.h
index 1e26acab1..f8fb48a05 100644
--- a/src/modules/dcc/DccFileTransfer.h
+++ b/src/modules/dcc/DccFileTransfer.h
@@ -53,46 +53,47 @@ class QMenu;
typedef struct _KviDccSendThreadOptions
{
- KviCString szFileName;
- quint64 uStartPosition;
- int iPacketSize;
- int iIdleStepLengthInMSec;
- bool bFastSend;
- bool bNoAcks;
- bool bIsTdcc;
+ KviCString szFileName;
+ quint64 uStartPosition;
+ int iPacketSize;
+ int iIdleStepLengthInMSec;
+ bool bFastSend;
+ bool bNoAcks;
+ bool bIsTdcc;
unsigned int uMaxBandwidth;
} KviDccSendThreadOptions;
-
class DccSendThread : public DccThread
{
public:
- DccSendThread(QObject * par,kvi_socket_t fd,KviDccSendThreadOptions * opt);
+ DccSendThread(QObject * par, kvi_socket_t fd, KviDccSendThreadOptions * opt);
~DccSendThread();
+
private:
// stats: SHARED!!!
- uint m_uAverageSpeed;
- uint m_uInstantSpeed;
- quint64 m_uFilePosition;
- quint64 m_uAckedBytes;
- quint64 m_uTotalSentBytes;
+ uint m_uAverageSpeed;
+ uint m_uInstantSpeed;
+ quint64 m_uFilePosition;
+ quint64 m_uAckedBytes;
+ quint64 m_uTotalSentBytes;
// internal
- unsigned long m_uStartTime;
- unsigned long m_uInstantSpeedInterval;
- quint64 m_uInstantSentBytes;
+ unsigned long m_uStartTime;
+ unsigned long m_uInstantSpeedInterval;
+ quint64 m_uInstantSentBytes;
KviDccSendThreadOptions * m_pOpt;
- KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth but not only
+ KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth but not only
public:
void initGetInfo();
- uint averageSpeed(){ return m_uAverageSpeed; };
- uint instantSpeed(){ return m_uInstantSpeed; };
- quint64 filePosition(){ return m_uFilePosition; };
+ uint averageSpeed() { return m_uAverageSpeed; };
+ uint instantSpeed() { return m_uInstantSpeed; };
+ quint64 filePosition() { return m_uFilePosition; };
// sent ONLY in this session
- quint64 sentBytes(){ return m_uTotalSentBytes; };
- quint64 ackedBytes(){ return m_uAckedBytes; };
- unsigned int bandwidthLimit(){ return m_pOpt->uMaxBandwidth; };
- void setBandwidthLimit(unsigned int uMaxBandwidth){ m_pOpt->uMaxBandwidth = uMaxBandwidth; };
+ quint64 sentBytes() { return m_uTotalSentBytes; };
+ quint64 ackedBytes() { return m_uAckedBytes; };
+ unsigned int bandwidthLimit() { return m_pOpt->uMaxBandwidth; };
+ void setBandwidthLimit(unsigned int uMaxBandwidth) { m_pOpt->uMaxBandwidth = uMaxBandwidth; };
void doneGetInfo();
+
protected:
void updateStats();
virtual void run();
@@ -100,47 +101,50 @@ protected:
typedef struct _KviDccRecvThreadOptions
{
- bool bResume;
- KviCString szFileName;
- quint64 uTotalFileSize;
- int iIdleStepLengthInMSec;
- bool bSendZeroAck;
- bool bSend64BitAck;
- bool bNoAcks;
- bool bIsTdcc;
+ bool bResume;
+ KviCString szFileName;
+ quint64 uTotalFileSize;
+ int iIdleStepLengthInMSec;
+ bool bSendZeroAck;
+ bool bSend64BitAck;
+ bool bNoAcks;
+ bool bIsTdcc;
unsigned int uMaxBandwidth;
} KviDccRecvThreadOptions;
class DccRecvThread : public DccThread
{
public:
- DccRecvThread(QObject * par,kvi_socket_t fd,KviDccRecvThreadOptions * opt);
+ DccRecvThread(QObject * par, kvi_socket_t fd, KviDccRecvThreadOptions * opt);
~DccRecvThread();
+
protected:
KviDccRecvThreadOptions * m_pOpt;
// stats: SHARED!
- uint m_uAverageSpeed;
- uint m_uInstantSpeed;
- quint64 m_uFilePosition;
- quint64 m_uTotalReceivedBytes;
+ uint m_uAverageSpeed;
+ uint m_uInstantSpeed;
+ quint64 m_uFilePosition;
+ quint64 m_uTotalReceivedBytes;
// internal
- unsigned long m_uStartTime;
- KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth
- quint64 m_uInstantReceivedBytes;
- quint64 m_uInstantSpeedInterval;
- QFile * m_pFile;
+ unsigned long m_uStartTime;
+ KviMSecTimeInterval * m_pTimeInterval; // used for computing the instant bandwidth
+ quint64 m_uInstantReceivedBytes;
+ quint64 m_uInstantSpeedInterval;
+ QFile * m_pFile;
+
public:
void initGetInfo();
- uint averageSpeed(){ return m_uAverageSpeed; };
- uint instantSpeed(){ return m_uInstantSpeed; };
- quint64 filePosition(){ return m_uFilePosition; };
+ uint averageSpeed() { return m_uAverageSpeed; };
+ uint instantSpeed() { return m_uInstantSpeed; };
+ quint64 filePosition() { return m_uFilePosition; };
// received ONLY in this session
- quint64 receivedBytes(){ return m_uTotalReceivedBytes; };
- unsigned int bandwidthLimit(){ return m_pOpt->uMaxBandwidth; };
- void setBandwidthLimit(unsigned int uMaxBandwidth){ m_pOpt->uMaxBandwidth = uMaxBandwidth; };
+ quint64 receivedBytes() { return m_uTotalReceivedBytes; };
+ unsigned int bandwidthLimit() { return m_pOpt->uMaxBandwidth; };
+ void setBandwidthLimit(unsigned int uMaxBandwidth) { m_pOpt->uMaxBandwidth = uMaxBandwidth; };
void doneGetInfo();
+
protected:
void postMessageEvent(const char * msg);
void updateStats();
@@ -148,82 +152,89 @@ protected:
virtual void run();
};
-
class DccFileTransferBandwidthDialog : public QDialog
{
Q_OBJECT
public:
- DccFileTransferBandwidthDialog(QWidget * pParent,DccFileTransfer * t);
+ DccFileTransferBandwidthDialog(QWidget * pParent, DccFileTransfer * t);
~DccFileTransferBandwidthDialog();
+
protected:
DccFileTransfer * m_pTransfer;
QCheckBox * m_pEnableLimitCheck;
QSpinBox * m_pLimitBox;
+
protected:
- virtual void closeEvent(QCloseEvent *e);
+ virtual void closeEvent(QCloseEvent * e);
protected slots:
void okClicked();
void cancelClicked();
};
-
class DccFileTransfer : public KviFileTransfer, public DccMarshalOutputContext
{
- enum GeneralStatus { Connecting, Transferring, Success, Failure };
+ enum GeneralStatus
+ {
+ Connecting,
+ Transferring,
+ Success,
+ Failure
+ };
Q_OBJECT
public:
DccFileTransfer(DccDescriptor * dcc);
~DccFileTransfer();
+
private:
- DccSendThread * m_pSlaveSendThread;
- DccRecvThread * m_pSlaveRecvThread;
- DccDescriptor * m_pDescriptor;
- DccMarshal * m_pMarshal;
+ DccSendThread * m_pSlaveSendThread;
+ DccRecvThread * m_pSlaveRecvThread;
+ DccDescriptor * m_pDescriptor;
+ DccMarshal * m_pMarshal;
- KviCString m_szTarget;
- KviCString m_szDccType;
- QString m_szTransferIdString;
+ KviCString m_szTarget;
+ KviCString m_szDccType;
+ QString m_szTransferIdString;
- QString m_szStatusString;
- GeneralStatus m_eGeneralStatus;
+ QString m_szStatusString;
+ GeneralStatus m_eGeneralStatus;
- QString m_szTransferLog; // html
+ QString m_szTransferLog; // html
- kvi_time_t m_tTransferStartTime;
- kvi_time_t m_tTransferEndTime;
+ kvi_time_t m_tTransferStartTime;
+ kvi_time_t m_tTransferEndTime;
// cached stats
- quint64 m_uTotalFileSize; // total file size to transfer
+ quint64 m_uTotalFileSize; // total file size to transfer
- unsigned int m_uMaxBandwidth;
+ unsigned int m_uMaxBandwidth;
DccFileTransferBandwidthDialog * m_pBandwidthDialog;
- QTimer * m_pResumeTimer; // used to signal resume timeout
+ QTimer * m_pResumeTimer; // used to signal resume timeout
public:
- bool resumeAccepted(const char * filename,const char * port,const char *szZeroPortTag);
- bool doResume(const char * filename,const char * port,quint64 filePos);
+ bool resumeAccepted(const char * filename, const char * port, const char * szZeroPortTag);
+ bool doResume(const char * filename, const char * port, quint64 filePos);
static void init();
static void done();
static unsigned int runningTransfersCount();
- static DccFileTransfer * nonFailedTransferWithLocalFileName(const QString &szLocalFileName);
+ static DccFileTransfer * nonFailedTransferWithLocalFileName(const QString & szLocalFileName);
static unsigned int transferCount();
- static bool handleResumeAccepted(const char * filename,const char * port,const char * szZeroPortTag);
- static bool handleResumeRequest(const char * filename,const char * port,quint64 filePos);
+ static bool handleResumeAccepted(const char * filename, const char * port, const char * szZeroPortTag);
+ static bool handleResumeRequest(const char * filename, const char * port, quint64 filePos);
- virtual bool event(QEvent *e);
+ virtual bool event(QEvent * e);
virtual KviWindow * dccMarshalOutputWindow();
virtual const char * dccMarshalOutputContextString();
- virtual void displayPaint(QPainter * p,int column, QRect rect);
+ virtual void displayPaint(QPainter * p, int column, QRect rect);
virtual int displayHeight(int iLineSpacing);
virtual void fillContextPopup(QMenu * m);
- virtual void fillStatusString(QString &szBuffer);
+ virtual void fillStatusString(QString & szBuffer);
virtual bool active();
virtual QString tipText();
virtual QString localFileName();
- bool isFileUpload(){ return m_pDescriptor->isFileUpload(); };
+ bool isFileUpload() { return m_pDescriptor->isFileUpload(); };
unsigned int averageSpeed();
unsigned int instantSpeed();
@@ -232,12 +243,13 @@ public:
int bandwidthLimit();
void setBandwidthLimit(int iVal);
virtual DccThread * getSlaveThread();
+
protected:
void startConnection();
void listenOrConnect();
- void addToTransferLog(const QString &s);
- void outputAndLog(const QString &s);
- void outputAndLog(int msgtype,const QString &s);
+ void addToTransferLog(const QString & s);
+ void outputAndLog(const QString & s);
+ void outputAndLog(int msgtype, const QString & s);
KviWindow * eventWindow();
protected slots:
void connectionInProgress();
diff --git a/src/modules/dcc/DccMarshal.cpp b/src/modules/dcc/DccMarshal.cpp
index 0575ab9e5..9f7b9af34 100644
--- a/src/modules/dcc/DccMarshal.cpp
+++ b/src/modules/dcc/DccMarshal.cpp
@@ -37,16 +37,16 @@
#include
DccMarshal::DccMarshal(DccMarshalOutputContext * ctx)
-: QObject(0)
+ : QObject(0)
{
setObjectName("dcc_marshal");
- m_pSn = 0;
- m_fd = KVI_INVALID_SOCKET;
- m_pTimeoutTimer = 0;
- m_bIPv6 = false;
- m_pOutputContext = ctx;
+ m_pSn = 0;
+ m_fd = KVI_INVALID_SOCKET;
+ m_pTimeoutTimer = 0;
+ m_bIPv6 = false;
+ m_pOutputContext = ctx;
#ifdef COMPILE_SSL_SUPPORT
- m_pSSL = 0;
+ m_pSSL = 0;
#endif
m_szIp = "";
m_szPort = "";
@@ -88,10 +88,10 @@ void DccMarshal::reset()
m_fd = KVI_INVALID_SOCKET;
}
#ifdef COMPILE_SSL_SUPPORT
-// qDebug("MARSHAL RESETTING (SSL=%d)",m_pSSL);
+ // qDebug("MARSHAL RESETTING (SSL=%d)",m_pSSL);
if(m_pSSL)
{
-// qDebug("MARSHAL CLEARING THE SSL");
+ // qDebug("MARSHAL CLEARING THE SSL");
KviSSLMaster::freeSSL(m_pSSL);
m_pSSL = 0;
}
@@ -104,7 +104,7 @@ void DccMarshal::reset()
m_bIPv6 = false;
}
-KviError::Code DccMarshal::dccListen(const QString &ip,const QString &port,bool bUseTimeout,bool bUseSSL)
+KviError::Code DccMarshal::dccListen(const QString & ip, const QString & port, bool bUseTimeout, bool bUseSSL)
{
if(m_fd != KVI_INVALID_SOCKET)
return KviError::AnotherConnectionInProgress;
@@ -143,7 +143,9 @@ void DccMarshal::doListen()
{
emit error(KviError::InvalidIpAddress);
return;
- } else m_bIPv6 = true;
+ }
+ else
+ m_bIPv6 = true;
#else
emit error(KviError::InvalidIpAddress);
return;
@@ -166,12 +168,11 @@ void DccMarshal::doListen()
}
#endif
-
#ifdef COMPILE_IPV6_SUPPORT
m_fd = kvi_socket_create(m_bIPv6 ? KVI_SOCKET_PF_INET6 : KVI_SOCKET_PF_INET,
- KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP);
+ KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP);
#else
- m_fd = kvi_socket_create(KVI_SOCKET_PF_INET,KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP);
+ m_fd = kvi_socket_create(KVI_SOCKET_PF_INET, KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP);
#endif
if(m_fd == KVI_INVALID_SOCKET)
@@ -183,9 +184,9 @@ void DccMarshal::doListen()
if((!KVI_OPTION_BOOL(KviOption_boolUserDefinedPortRange)) || (m_uPort != 0))
{
#ifdef COMPILE_IPV6_SUPPORT
- KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,m_bIPv6);
+ KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, m_bIPv6);
#else
- KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,false);
+ KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, false);
#endif
if(!sa.socketAddress())
@@ -195,22 +196,25 @@ void DccMarshal::doListen()
return;
}
- if(!kvi_socket_bind(m_fd,sa.socketAddress(),sa.addressLength()))
+ if(!kvi_socket_bind(m_fd, sa.socketAddress(), sa.addressLength()))
{
reset();
emit error(KviError::BindFailed);
return;
}
-
- } else {
+ }
+ else
+ {
m_uPort = KVI_OPTION_UINT(KviOption_uintDccMinPort);
- if(KVI_OPTION_UINT(KviOption_uintDccMaxPort) > 65535)KVI_OPTION_UINT(KviOption_uintDccMaxPort) = 65535;
+ if(KVI_OPTION_UINT(KviOption_uintDccMaxPort) > 65535)
+ KVI_OPTION_UINT(KviOption_uintDccMaxPort) = 65535;
bool bBindSuccess;
- do {
+ do
+ {
#ifdef COMPILE_IPV6_SUPPORT
- KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,m_bIPv6);
+ KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, m_bIPv6);
#else
- KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,false);
+ KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, false);
#endif
if(!sa.socketAddress())
{
@@ -219,7 +223,7 @@ void DccMarshal::doListen()
return;
}
- bBindSuccess = kvi_socket_bind(m_fd,sa.socketAddress(),sa.addressLength());
+ bBindSuccess = kvi_socket_bind(m_fd, sa.socketAddress(), sa.addressLength());
if(!bBindSuccess)
{
@@ -240,41 +244,40 @@ void DccMarshal::doListen()
emit error(KviError::BindFailed);
return;
}
-
}
- if(!kvi_socket_listen(m_fd,1))
+ if(!kvi_socket_listen(m_fd, 1))
{
reset();
emit error(KviError::ListenFailed);
return;
}
-
- // Reread the port in case we're binding to a random one (0)
+// Reread the port in case we're binding to a random one (0)
#ifdef COMPILE_IPV6_SUPPORT
- KviSockaddr sareal(0,m_bIPv6);
+ KviSockaddr sareal(0, m_bIPv6);
#else
- KviSockaddr sareal(0,false);
+ KviSockaddr sareal(0, false);
#endif
-
int size = sareal.addressLength();
- if(kvi_socket_getsockname(m_fd,sareal.socketAddress(),&size))
+ if(kvi_socket_getsockname(m_fd, sareal.socketAddress(), &size))
{
-// qDebug("GETSOCKNAMEOK");
+ // qDebug("GETSOCKNAMEOK");
m_szPort.setNum(sareal.port());
m_uPort = sareal.port();
-// qDebug("REALPORT %u",m_uPort);
- } else {
-// qDebug("GETSOCKNAMEFAILED");
+ // qDebug("REALPORT %u",m_uPort);
+ }
+ else
+ {
+ // qDebug("GETSOCKNAMEFAILED");
}
// and setup the READ notifier...
- m_pSn = new QSocketNotifier(m_fd,QSocketNotifier::Read);
- QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(snActivated(int)));
+ m_pSn = new QSocketNotifier(m_fd, QSocketNotifier::Read);
+ QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(snActivated(int)));
m_pSn->setEnabled(true);
// set the timer
@@ -290,7 +293,7 @@ void DccMarshal::doListen()
if(m_bUseTimeout)
{
m_pTimeoutTimer = new QTimer();
- connect(m_pTimeoutTimer,SIGNAL(timeout()),this,SLOT(connectionTimedOut()));
+ connect(m_pTimeoutTimer, SIGNAL(timeout()), this, SLOT(connectionTimedOut()));
m_pTimeoutTimer->setSingleShot(true);
m_pTimeoutTimer->setInterval((KVI_OPTION_UINT(KviOption_uintDccSocketTimeout) * 1000));
m_pTimeoutTimer->start();
@@ -300,7 +303,7 @@ void DccMarshal::doListen()
emit inProgress();
}
-KviError::Code DccMarshal::dccConnect(const char * ip,const char * port,bool bUseTimeout,bool bUseSSL)
+KviError::Code DccMarshal::dccConnect(const char * ip, const char * port, bool bUseTimeout, bool bUseSSL)
{
if(m_fd != KVI_INVALID_SOCKET)
return KviError::AnotherConnectionInProgress;
@@ -336,7 +339,9 @@ void DccMarshal::doConnect()
{
emit error(KviError::InvalidIpAddress);
return;
- } else m_bIPv6 = true;
+ }
+ else
+ m_bIPv6 = true;
#else
emit error(KviError::InvalidIpAddress);
return;
@@ -351,14 +356,13 @@ void DccMarshal::doConnect()
return;
}
-
- // create the socket
+// create the socket
#ifdef COMPILE_IPV6_SUPPORT
m_fd = kvi_socket_create(m_bIPv6 ? KVI_SOCKET_PF_INET6 : KVI_SOCKET_PF_INET,
- KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP);
+ KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP);
#else
m_fd = kvi_socket_create(KVI_SOCKET_PF_INET,
- KVI_SOCKET_TYPE_STREAM,KVI_SOCKET_PROTO_TCP);
+ KVI_SOCKET_TYPE_STREAM, KVI_SOCKET_PROTO_TCP);
#endif
if(m_fd == KVI_INVALID_SOCKET)
{
@@ -374,13 +378,12 @@ void DccMarshal::doConnect()
return;
}
-
- // fill the sockaddr structure
+// fill the sockaddr structure
#ifdef COMPILE_IPV6_SUPPORT
- KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,m_bIPv6);
+ KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, m_bIPv6);
#else
- KviSockaddr sa(m_szIp.toUtf8().data(),m_uPort,false);
+ KviSockaddr sa(m_szIp.toUtf8().data(), m_uPort, false);
#endif
if(!sa.socketAddress())
@@ -390,34 +393,36 @@ void DccMarshal::doConnect()
return;
}
- if(!kvi_socket_connect(m_fd,sa.socketAddress(),sa.addressLength()))
+ if(!kvi_socket_connect(m_fd, sa.socketAddress(), sa.addressLength()))
{
int err = kvi_socket_error();
if(!kvi_socket_recoverableConnectError(err))
{
// Ops...
- int sockError=err;
- if(sockError==0)
+ int sockError = err;
+ if(sockError == 0)
{
// Zero error ?...let's look closer
- int iSize=sizeof(int);
- if(!kvi_socket_getsockopt(m_fd,SOL_SOCKET,SO_ERROR,
- (void *)&sockError,&iSize))sockError=0;
+ int iSize = sizeof(int);
+ if(!kvi_socket_getsockopt(m_fd, SOL_SOCKET, SO_ERROR,
+ (void *)&sockError, &iSize))
+ sockError = 0;
}
// Die
reset();
// And declare problems :)
- if(sockError)emit error(KviError::translateSystemError(sockError));
- else emit error(KviError::UnknownError); //Error 0 ?
+ if(sockError)
+ emit error(KviError::translateSystemError(sockError));
+ else
+ emit error(KviError::UnknownError); //Error 0 ?
return;
}
}
-
// and setup the WRITE notifier...
- m_pSn = new QSocketNotifier(m_fd,QSocketNotifier::Write);
- QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(snActivated(int)));
+ m_pSn = new QSocketNotifier(m_fd, QSocketNotifier::Write);
+ QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(snActivated(int)));
m_pSn->setEnabled(true);
// set the timer
@@ -433,7 +438,7 @@ void DccMarshal::doConnect()
if(m_bUseTimeout)
{
m_pTimeoutTimer = new QTimer();
- connect(m_pTimeoutTimer,SIGNAL(timeout()),this,SLOT(connectionTimedOut()));
+ connect(m_pTimeoutTimer, SIGNAL(timeout()), this, SLOT(connectionTimedOut()));
m_pTimeoutTimer->setSingleShot(true);
m_pTimeoutTimer->setInterval(KVI_OPTION_UINT(KviOption_uintDccSocketTimeout) * 1000);
m_pTimeoutTimer->start();
@@ -443,7 +448,6 @@ void DccMarshal::doConnect()
emit inProgress();
}
-
void DccMarshal::snActivated(int)
{
if(m_pTimeoutTimer)
@@ -454,7 +458,7 @@ void DccMarshal::snActivated(int)
#ifdef COMPILE_IPV6_SUPPORT
struct sockaddr_in6 hostSockAddr6;
#endif
- struct sockaddr_in hostSockAddr;
+ struct sockaddr_in hostSockAddr;
int size = sizeof(hostSockAddr);
struct sockaddr * addr = (struct sockaddr *)&hostSockAddr;
@@ -472,14 +476,17 @@ void DccMarshal::snActivated(int)
// outgoing connection (we have called connect())
// Check for errors...
int sockError;
- int iSize=sizeof(int);
- if(!kvi_socket_getsockopt(m_fd,SOL_SOCKET,SO_ERROR,(void *)&sockError,&iSize))sockError = -1;
+ int iSize = sizeof(int);
+ if(!kvi_socket_getsockopt(m_fd, SOL_SOCKET, SO_ERROR, (void *)&sockError, &iSize))
+ sockError = -1;
if(sockError != 0)
{
//failed
KviError::Code eError;
- if(sockError > 0)eError = KviError::translateSystemError(sockError);
- else eError = KviError::UnknownError; //Error 0 ?
+ if(sockError > 0)
+ eError = KviError::translateSystemError(sockError);
+ else
+ eError = KviError::UnknownError; //Error 0 ?
reset();
emit error(eError);
return;
@@ -488,29 +495,35 @@ void DccMarshal::snActivated(int)
delete m_pSn;
m_pSn = 0;
// get the local address
- if(!kvi_socket_getsockname(m_fd,addr,&size))
+ if(!kvi_socket_getsockname(m_fd, addr, &size))
{
m_szSecondaryIp = "localhost";
- m_szSecondaryPort = __tr2qs_ctx("unknown","dcc");
- } else {
+ m_szSecondaryPort = __tr2qs_ctx("unknown", "dcc");
+ }
+ else
+ {
#ifdef COMPILE_IPV6_SUPPORT
if(m_bIPv6)
{
m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in6 *)addr)->sin6_port));
- if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr,m_szSecondaryIp))
+ if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr, m_szSecondaryIp))
m_szSecondaryIp = "localhost";
- } else {
+ }
+ else
+ {
#endif
m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in *)addr)->sin_port));
- if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr,m_szSecondaryIp))
+ if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr, m_szSecondaryIp))
m_szSecondaryIp = "localhost";
#ifdef COMPILE_IPV6_SUPPORT
}
#endif
}
- } else {
+ }
+ else
+ {
// Incoming connection
- int newsock = kvi_socket_accept(m_fd,addr,&size);
+ int newsock = kvi_socket_accept(m_fd, addr, &size);
if(newsock != KVI_INVALID_SOCKET)
{
// Connected
@@ -520,13 +533,15 @@ void DccMarshal::snActivated(int)
if(m_bIPv6)
{
m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in6 *)addr)->sin6_port));
- if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr,m_szSecondaryIp))
- m_szSecondaryIp = __tr2qs_ctx("unknown","dcc");
- } else {
+ if(!KviNetUtils::binaryIpToStringIp_V6(((struct sockaddr_in6 *)addr)->sin6_addr, m_szSecondaryIp))
+ m_szSecondaryIp = __tr2qs_ctx("unknown", "dcc");
+ }
+ else
+ {
#endif
m_szSecondaryPort.setNum(ntohs(((struct sockaddr_in *)addr)->sin_port));
- if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr,m_szSecondaryIp))
- m_szSecondaryIp = __tr2qs_ctx("unknown","dcc");
+ if(!KviNetUtils::binaryIpToStringIp(((struct sockaddr_in *)addr)->sin_addr, m_szSecondaryIp))
+ m_szSecondaryIp = __tr2qs_ctx("unknown", "dcc");
#ifdef COMPILE_IPV6_SUPPORT
}
#endif
@@ -538,8 +553,9 @@ void DccMarshal::snActivated(int)
emit error(KviError::AsyncSocketFailed);
return;
}
-
- } else {
+ }
+ else
+ {
// Huh ?.. wait for the next notifier call
return;
}
@@ -549,13 +565,15 @@ void DccMarshal::snActivated(int)
// SSL Handshake needed ?
if(m_bUseSSL)
{
- m_pSSL = KviSSLMaster::allocSSL(m_pOutputContext->dccMarshalOutputWindow(),m_fd,m_bOutgoing ? KviSSL::Client : KviSSL::Server,m_pOutputContext->dccMarshalOutputContextString());
+ m_pSSL = KviSSLMaster::allocSSL(m_pOutputContext->dccMarshalOutputWindow(), m_fd, m_bOutgoing ? KviSSL::Client : KviSSL::Server, m_pOutputContext->dccMarshalOutputContextString());
if(m_pSSL)
{
emit startingSSLHandshake();
doSSLHandshake(0);
- } else {
+ }
+ else
+ {
reset();
emit error(KviError::SSLError);
}
@@ -569,7 +587,7 @@ void DccMarshal::snActivated(int)
void DccMarshal::doSSLHandshake(int)
{
#ifdef COMPILE_SSL_SUPPORT
-// qDebug("DO SSL HANDSHAKE");
+ // qDebug("DO SSL HANDSHAKE");
if(m_pSn)
{
delete m_pSn;
@@ -590,24 +608,24 @@ void DccMarshal::doSSLHandshake(int)
{
case KviSSL::Success:
// done!
-// qDebug("EMITTING CONNECTED");
+ // qDebug("EMITTING CONNECTED");
emit connected();
-// qDebug("CONNECTED EMITTED");
- break;
+ // qDebug("CONNECTED EMITTED");
+ break;
case KviSSL::WantRead:
- m_pSn = new QSocketNotifier((int)m_fd,QSocketNotifier::Read);
- QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(doSSLHandshake(int)));
+ m_pSn = new QSocketNotifier((int)m_fd, QSocketNotifier::Read);
+ QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(doSSLHandshake(int)));
m_pSn->setEnabled(true);
- break;
+ break;
case KviSSL::WantWrite:
- m_pSn = new QSocketNotifier((int)m_fd,QSocketNotifier::Write);
- QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(doSSLHandshake(int)));
+ m_pSn = new QSocketNotifier((int)m_fd, QSocketNotifier::Write);
+ QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(doSSLHandshake(int)));
m_pSn->setEnabled(true);
- break;
+ break;
case KviSSL::RemoteEndClosedConnection:
reset();
emit error(KviError::RemoteEndClosedConnection);
- break;
+ break;
case KviSSL::SyscallError:
{
// syscall problem
@@ -615,11 +633,13 @@ void DccMarshal::doSSLHandshake(int)
if(kvi_socket_recoverableError(err))
{
// can recover ? (EAGAIN, EINTR ?)
- m_pSn = new QSocketNotifier((int)m_fd,QSocketNotifier::Write);
- QObject::connect(m_pSn,SIGNAL(activated(int)),this,SLOT(doSSLHandshake(int)));
+ m_pSn = new QSocketNotifier((int)m_fd, QSocketNotifier::Write);
+ QObject::connect(m_pSn, SIGNAL(activated(int)), this, SLOT(doSSLHandshake(int)));
m_pSn->setEnabled(true);
return;
- } else {
+ }
+ else
+ {
// Declare problems :)
reset();
emit error(err ? KviError::translateSystemError(err) : KviError::UnknownError);
@@ -629,7 +649,8 @@ void DccMarshal::doSSLHandshake(int)
default:
{
KviCString buffer;
- while(m_pSSL->getLastErrorString(buffer))emit sslError(buffer.ptr());
+ while(m_pSSL->getLastErrorString(buffer))
+ emit sslError(buffer.ptr());
reset();
emit error(KviError::SSLError);
}
diff --git a/src/modules/dcc/DccMarshal.h b/src/modules/dcc/DccMarshal.h
index d60e86342..b9a3e17b1 100644
--- a/src/modules/dcc/DccMarshal.h
+++ b/src/modules/dcc/DccMarshal.h
@@ -37,16 +37,17 @@ class KviWindow;
class DccMarshal;
#ifdef COMPILE_SSL_SUPPORT
- #include "KviSSLMaster.h"
+#include "KviSSLMaster.h"
#endif
-
class DccMarshalOutputContext
{
friend class DccMarshal;
+
public:
DccMarshalOutputContext(){};
virtual ~DccMarshalOutputContext(){};
+
protected:
virtual KviWindow * dccMarshalOutputWindow() = 0;
virtual const char * dccMarshalOutputContextString() = 0;
@@ -58,26 +59,28 @@ class DccMarshal : public QObject
public:
DccMarshal(DccMarshalOutputContext * ctx);
~DccMarshal();
+
protected:
// DCC DESCRIPTOR
- QString m_szIp; // Dcc initiator ip address (the one that listens)
- QString m_szPort; // Dcc initiator port (the one that listens)
+ QString m_szIp; // Dcc initiator ip address (the one that listens)
+ QString m_szPort; // Dcc initiator port (the one that listens)
// other info
- bool m_bIPv6; // Dcc mode
- kvi_u32_t m_uPort; // Dcc initiator port
- bool m_bOutgoing; // true if WE have connected to the remote host (so m_szIp is the remote host ip)
- QString m_szSecondaryIp; // Ip of the client that has connected to the remote host
- QString m_szSecondaryPort; // Port of the client that has connected to the remote host
+ bool m_bIPv6; // Dcc mode
+ kvi_u32_t m_uPort; // Dcc initiator port
+ bool m_bOutgoing; // true if WE have connected to the remote host (so m_szIp is the remote host ip)
+ QString m_szSecondaryIp; // Ip of the client that has connected to the remote host
+ QString m_szSecondaryPort; // Port of the client that has connected to the remote host
// internals
- kvi_socket_t m_fd; // socket
- QSocketNotifier * m_pSn;
- bool m_bUseTimeout;
- QTimer * m_pTimeoutTimer;
+ kvi_socket_t m_fd; // socket
+ QSocketNotifier * m_pSn;
+ bool m_bUseTimeout;
+ QTimer * m_pTimeoutTimer;
#ifdef COMPILE_SSL_SUPPORT
- KviSSL * m_pSSL;
- bool m_bUseSSL;
+ KviSSL * m_pSSL;
+ bool m_bUseSSL;
#endif
DccMarshalOutputContext * m_pOutputContext;
+
public:
const QString & dccIp() const { return m_szIp; };
const QString & dccPort() const { return m_szPort; };
@@ -85,21 +88,22 @@ public:
const QString & localPort() const { return m_bOutgoing ? m_szSecondaryPort : m_szPort; };
const QString & remoteIp() const { return m_bOutgoing ? m_szIp : m_szSecondaryIp; };
const QString & remotePort() const { return m_bOutgoing ? m_szPort : m_szSecondaryPort; };
- KviError::Code dccListen(const QString &ip,const QString &port,bool bUseTimeout,bool bUseSSL = false);
- KviError::Code dccConnect(const char * ip,const char * port,bool bUseTimeout,bool bUseSSL = false);
+ KviError::Code dccListen(const QString & ip, const QString & port, bool bUseTimeout, bool bUseSSL = false);
+ KviError::Code dccConnect(const char * ip, const char * port, bool bUseTimeout, bool bUseSSL = false);
kvi_socket_t releaseSocket();
#ifdef COMPILE_SSL_SUPPORT
KviSSL * releaseSSL();
#endif
void abort();
+
private:
void reset();
-//#ifdef COMPILE_SSL_SUPPORT
-// bool trySSLCertificate();
-//#endif
+ //#ifdef COMPILE_SSL_SUPPORT
+ // bool trySSLCertificate();
+ //#endif
private slots:
void doSSLHandshake(int);
-// void doListenSSLHandshake();
+ // void doListenSSLHandshake();
void snActivated(int);
void connectionTimedOut();
void doListen();
@@ -112,5 +116,4 @@ signals:
void error(KviError::Code);
};
-
#endif //_MARSHAL_H_
diff --git a/src/modules/dcc/DccThread.cpp b/src/modules/dcc/DccThread.cpp
index a2ace585e..d3ec9af52 100644
--- a/src/modules/dcc/DccThread.cpp
+++ b/src/modules/dcc/DccThread.cpp
@@ -33,28 +33,30 @@
#include "kvi_socket.h"
#ifdef COMPILE_SSL_SUPPORT
- #include "KviSSLMaster.h"
+#include "KviSSLMaster.h"
#endif
-DccThread::DccThread(QObject * par,kvi_socket_t fd)
-: KviSensitiveThread()
+DccThread::DccThread(QObject * par, kvi_socket_t fd)
+ : KviSensitiveThread()
{
- m_pParent = par;
- m_fd = fd;
- m_pMutex = new KviMutex();
+ m_pParent = par;
+ m_fd = fd;
+ m_pMutex = new KviMutex();
#ifdef COMPILE_SSL_SUPPORT
-// qDebug("CLEARING SSL IN DccThread constructor");
- m_pSSL = 0;
+ // qDebug("CLEARING SSL IN DccThread constructor");
+ m_pSSL = 0;
#endif
}
DccThread::~DccThread()
{
#ifdef COMPILE_SSL_SUPPORT
- if(m_pSSL)KviSSLMaster::freeSSL(m_pSSL);
+ if(m_pSSL)
+ KviSSLMaster::freeSSL(m_pSSL);
m_pSSL = 0;
#endif
- if(m_fd != KVI_INVALID_SOCKET)kvi_socket_close(m_fd);
+ if(m_fd != KVI_INVALID_SOCKET)
+ kvi_socket_close(m_fd);
KVI_ASSERT(!m_pMutex->locked());
delete m_pMutex;
}
@@ -62,7 +64,8 @@ DccThread::~DccThread()
#ifdef COMPILE_SSL_SUPPORT
void DccThread::setSSL(KviSSL * s)
{
- if(m_pSSL)KviSSLMaster::freeSSL(m_pSSL);
+ if(m_pSSL)
+ KviSSLMaster::freeSSL(m_pSSL);
m_pSSL = s;
}
#endif
@@ -75,7 +78,9 @@ bool DccThread::handleInvalidSocketRead(int readLen)
// connection closed
postErrorEvent(KviError::RemoteEndClosedConnection);
return false;
- } else {
+ }
+ else
+ {
// error ?
int err = kvi_socket_error();
if((err != EINTR) && (err != EAGAIN))
@@ -93,7 +98,7 @@ void DccThread::raiseSSLError()
KviCString buffer;
while(m_pSSL->getLastErrorString(buffer))
{
- KviCString msg(KviCString::Format,"[SSL ERROR]: %s",buffer.ptr());
+ KviCString msg(KviCString::Format, "[SSL ERROR]: %s", buffer.ptr());
postMessageEvent(msg.ptr());
}
}
@@ -103,12 +108,12 @@ void DccThread::postErrorEvent(int err)
{
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ERROR);
e->setData(new int(err));
- postEvent(m_pParent,e);
+ postEvent(m_pParent, e);
}
void DccThread::postMessageEvent(const char * message)
{
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_MESSAGE);
e->setData(new KviCString(message));
- postEvent(m_pParent,e);
+ postEvent(m_pParent, e);
}
diff --git a/src/modules/dcc/DccThread.h b/src/modules/dcc/DccThread.h
index 55041ed6e..25f6fc4fd 100644
--- a/src/modules/dcc/DccThread.h
+++ b/src/modules/dcc/DccThread.h
@@ -32,7 +32,7 @@
#include
#ifdef COMPILE_SSL_SUPPORT
- #include "KviSSL.h"
+#include "KviSSL.h"
#endif
// KviThreadDataEvent
@@ -48,26 +48,28 @@
typedef struct _KviDccThreadIncomingData
{
- int iLen;
+ int iLen;
char * buffer;
} KviDccThreadIncomingData;
class DccThread : public KviSensitiveThread
{
public:
- DccThread(QObject * par,kvi_socket_t fd);
+ DccThread(QObject * par, kvi_socket_t fd);
~DccThread();
+
protected:
- KviMutex * m_pMutex; // OWNED! PROTECTS m_pOutBuffers
- kvi_socket_t m_fd;
- QObject * m_pParent; // READ ONLY!
+ KviMutex * m_pMutex; // OWNED! PROTECTS m_pOutBuffers
+ kvi_socket_t m_fd;
+ QObject * m_pParent; // READ ONLY!
#ifdef COMPILE_SSL_SUPPORT
- KviSSL * m_pSSL;
+ KviSSL * m_pSSL;
#endif
protected:
bool handleInvalidSocketRead(int readLen);
+
public:
- QObject * parent(){ return m_pParent; };
+ QObject * parent() { return m_pParent; };
void postErrorEvent(int err);
// Warning!..newer call __tr() here!...use __tr_no_lookup()
void postMessageEvent(const char * message);
diff --git a/src/modules/dcc/DccUtils.cpp b/src/modules/dcc/DccUtils.cpp
index 6d491b8f5..878f5ebd9 100644
--- a/src/modules/dcc/DccUtils.cpp
+++ b/src/modules/dcc/DccUtils.cpp
@@ -102,7 +102,7 @@ bool dcc_module_get_listen_ip_address(KviCommand *c,KviConsoleWindow * pConsole,
}
*/
-bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow * pConsole,QString &szListenIp)
+bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall * c, KviConsoleWindow * pConsole, QString & szListenIp)
{
//
// Find an interface suitable for listening....
@@ -116,16 +116,19 @@ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow *
{
if(KviNetUtils::isValidStringIp(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data()))
{
- if(KviQString::equalCI(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface),"0.0.0.0"))
+ if(KviQString::equalCI(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface), "0.0.0.0"))
{
// Try to find the first available IPv4 interface
if(!kvi_getLocalHostAddress(szListenIp))
{
- if(c)c->warning(__tr2qs_ctx("Can't retrieve a suitable local IPv4 address","dcc"),
- KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data());
+ if(c)
+ c->warning(__tr2qs_ctx("Can't retrieve a suitable local IPv4 address", "dcc"),
+ KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data());
return false;
}
- } else {
+ }
+ else
+ {
szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface);
}
return true;
@@ -134,20 +137,25 @@ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow *
if(KviNetUtils::isValidStringIPv6(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data()))
{
szListenIp = KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface);
- } else {
+ }
+ else
+ {
#endif
- if(!KviNetUtils::getInterfaceAddress(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface),szListenIp))
+ if(!KviNetUtils::getInterfaceAddress(KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface), szListenIp))
{
KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false;
- if(c)c->warning(__tr2qs_ctx("Can't listen on default interface '%s': fix it in the options dialog, disabling the option (so the next DCC will work)","dcc"),
- KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data());
+ if(c)
+ c->warning(__tr2qs_ctx("Can't listen on default interface '%s': fix it in the options dialog, disabling the option (so the next DCC will work)", "dcc"),
+ KVI_OPTION_STRING(KviOption_stringDccListenDefaultInterface).toUtf8().data());
return false;
}
#ifdef COMPILE_IPV6_SUPPORT
}
#endif
return true;
- } else {
+ }
+ else
+ {
// the option was empty.. disable it
KVI_OPTION_BOOL(KviOption_boolDccListenOnSpecifiedInterfaceByDefault) = false;
}
@@ -158,11 +166,15 @@ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow *
if(pConsole->isConnected())
{
//#warning "The IPV6 choice is not OK here.... and maybe allow to bind to specified ports"
- pConsole->connection()->link()->socket()->getLocalHostIp(szListenIp,pConsole->isIPv6Connection());
- } else {
+ pConsole->connection()->link()->socket()->getLocalHostIp(szListenIp, pConsole->isIPv6Connection());
+ }
+ else
+ {
szListenIp = "0.0.0.0"; // huh ? :)
}
- } else {
+ }
+ else
+ {
szListenIp = "0.0.0.0";
}
diff --git a/src/modules/dcc/DccUtils.h b/src/modules/dcc/DccUtils.h
index 150e88de6..6020557ee 100644
--- a/src/modules/dcc/DccUtils.h
+++ b/src/modules/dcc/DccUtils.h
@@ -30,7 +30,7 @@
#include "KviKvsModuleInterface.h"
#ifndef _UTILS_CPP_
- extern bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsoleWindow * pConsole,QString &szListenIp);
+extern bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall * c, KviConsoleWindow * pConsole, QString & szListenIp);
#endif
#endif //_UTILS_H_
diff --git a/src/modules/dcc/DccVideoWindow.cpp b/src/modules/dcc/DccVideoWindow.cpp
index 546043804..3cedf19af 100644
--- a/src/modules/dcc/DccVideoWindow.cpp
+++ b/src/modules/dcc/DccVideoWindow.cpp
@@ -48,11 +48,11 @@
#include
#ifdef COMPILE_CRYPT_SUPPORT
- #include "KviCryptController.h"
+#include "KviCryptController.h"
#endif
#ifdef COMPILE_SSL_SUPPORT
- #include "KviSSLMaster.h"
+#include "KviSSLMaster.h"
#endif
#include
@@ -63,10 +63,10 @@ extern DccBroker * g_pDccBroker;
bool kvi_dcc_video_is_valid_codec(const char * codecName)
{
- if(kvi_strEqualCI("sjpeg",codecName))
+ if(kvi_strEqualCI("sjpeg", codecName))
return true;
#ifndef COMPILE_DISABLE_OGG_THEORA
- if(kvi_strEqualCI("theora",codecName))
+ if(kvi_strEqualCI("theora", codecName))
return true;
#endif
return false;
@@ -76,15 +76,14 @@ static DccVideoCodec * kvi_dcc_video_get_codec(const char * codecName)
{
Q_UNUSED(codecName);
#ifndef COMPILE_DISABLE_OGG_THEORA
- if(kvi_strEqualCI("theora",codecName))
+ if(kvi_strEqualCI("theora", codecName))
return new DccVideoTheoraCodec();
#endif
return new DccVideoSJpegCodec();
}
-
-DccVideoThread::DccVideoThread(KviWindow * wnd,kvi_socket_t fd,KviDccVideoThreadOptions * opt)
-: DccThread(wnd,fd)
+DccVideoThread::DccVideoThread(KviWindow * wnd, kvi_socket_t fd, KviDccVideoThreadOptions * opt)
+ : DccThread(wnd, fd)
{
m_pOpt = opt;
m_bPlaying = false;
@@ -104,25 +103,28 @@ DccVideoThread::~DccVideoThread()
bool DccVideoThread::readWriteStep()
{
-// qDebug("DccVideoThread::readWriteStep()");
+ // qDebug("DccVideoThread::readWriteStep()");
// Socket management
bool bCanRead;
bool bCanWrite;
- if(kvi_select(m_fd,&bCanRead,&bCanWrite))
+ if(kvi_select(m_fd, &bCanRead, &bCanWrite))
{
while(bCanRead)
{
unsigned int actualSize = m_inFrameBuffer.size();
m_inFrameBuffer.resize(actualSize + 16384);
- int readLen = kvi_socket_recv(m_fd,(void *)(m_inFrameBuffer.data() + actualSize),16384);
+ int readLen = kvi_socket_recv(m_fd, (void *)(m_inFrameBuffer.data() + actualSize), 16384);
if(readLen > 0)
{
- if(readLen < 16384)m_inFrameBuffer.resize(actualSize + readLen);
- m_pOpt->pCodec->decode(&m_inFrameBuffer,&m_videoInSignalBuffer,&m_textInSignalBuffer);
- } else {
- bCanRead=false;
-// if(!handleInvalidSocketRead(readLen))return false;
+ if(readLen < 16384)
+ m_inFrameBuffer.resize(actualSize + readLen);
+ m_pOpt->pCodec->decode(&m_inFrameBuffer, &m_videoInSignalBuffer, &m_textInSignalBuffer);
+ }
+ else
+ {
+ bCanRead = false;
+ // if(!handleInvalidSocketRead(readLen))return false;
m_inFrameBuffer.resize(actualSize);
}
}
@@ -132,12 +134,15 @@ bool DccVideoThread::readWriteStep()
// Have somethihg to write ?
if(m_outFrameBuffer.size() > 0)
{
- int written = kvi_socket_send(m_fd,m_outFrameBuffer.data(),m_outFrameBuffer.size());
+ int written = kvi_socket_send(m_fd, m_outFrameBuffer.data(), m_outFrameBuffer.size());
if(written > 0)
{
m_outFrameBuffer.remove(written);
- } else {
- if(!handleInvalidSocketRead(written))return false;
+ }
+ else
+ {
+ if(!handleInvalidSocketRead(written))
+ return false;
}
}
}
@@ -147,7 +152,7 @@ bool DccVideoThread::readWriteStep()
bool DccVideoThread::videoStep()
{
-// qDebug("DccVideoThread::videoStep()");
+ // qDebug("DccVideoThread::videoStep()");
// Are we playing ?
if(m_bPlaying)
@@ -164,17 +169,17 @@ bool DccVideoThread::videoStep()
// Are we recording ?
if(m_bRecording)
{
- QImage * pImage = ((DccVideoWindow*)parent())->m_pCameraImage;
+ QImage * pImage = ((DccVideoWindow *)parent())->m_pCameraImage;
if(pImage)
{
// grab the frame
- m_videoOutSignalBuffer.append((const unsigned char*) pImage->bits(), pImage->byteCount());
- m_pOpt->pCodec->encodeVideo(&m_videoOutSignalBuffer,&m_outFrameBuffer);
+ m_videoOutSignalBuffer.append((const unsigned char *)pImage->bits(), pImage->byteCount());
+ m_pOpt->pCodec->encodeVideo(&m_videoOutSignalBuffer, &m_outFrameBuffer);
// tell our parent to prepare a new frame
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_GRAB_FRAME));
- postEvent(DccThread::parent(),e);
+ postEvent(DccThread::parent(), e);
}
}
return true;
@@ -182,7 +187,7 @@ bool DccVideoThread::videoStep()
bool DccVideoThread::textStep()
{
-// qDebug("DccVideoThread::textStep()");
+ // qDebug("DccVideoThread::textStep()");
// Are we playing ?
if(m_bPlaying)
{
@@ -190,9 +195,9 @@ bool DccVideoThread::textStep()
{
KviDccThreadIncomingData data;
data.iLen = m_textInSignalBuffer.size();
- data.buffer = (char*) KviMemory::allocate(data.iLen);
+ data.buffer = (char *)KviMemory::allocate(data.iLen);
memcpy(data.buffer, m_textInSignalBuffer.data(), data.iLen);
- handleIncomingData(&data,false);
+ handleIncomingData(&data, false);
m_textInSignalBuffer.clear();
}
@@ -201,20 +206,20 @@ bool DccVideoThread::textStep()
// Are we recording ?
if(m_bRecording)
{
- if(((DccVideoWindow*)parent())->m_tmpTextDataOut.size())
+ if(((DccVideoWindow *)parent())->m_tmpTextDataOut.size())
{
- m_textOutSignalBuffer.append((const unsigned char*) ((DccVideoWindow*)parent())->m_tmpTextDataOut.constData(), ((DccVideoWindow*)parent())->m_tmpTextDataOut.size());
- ((DccVideoWindow*)parent())->m_tmpTextDataOut.clear();
+ m_textOutSignalBuffer.append((const unsigned char *)((DccVideoWindow *)parent())->m_tmpTextDataOut.constData(), ((DccVideoWindow *)parent())->m_tmpTextDataOut.size());
+ ((DccVideoWindow *)parent())->m_tmpTextDataOut.clear();
}
if(m_textOutSignalBuffer.size())
- m_pOpt->pCodec->encodeText(&m_textOutSignalBuffer,&m_outFrameBuffer);
+ m_pOpt->pCodec->encodeText(&m_textOutSignalBuffer, &m_outFrameBuffer);
}
return true;
}
-bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCritical)
+bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data, bool bCritical)
{
//qDebug("DccVideoThread::handleIncomingData");
KVI_ASSERT(data->iLen);
@@ -228,34 +233,39 @@ bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCr
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_DATA);
// The left part is len chars long
int len = aux - data->buffer;
-// qDebug("LEN = %d, iLen = %d",len,data->iLen);
-//#warning "DO IT BETTER (the \r cutting)"
- KviCString * s = new KviCString(data->buffer,len);
- if(s->lastCharIs('\r'))s->cutRight(1);
+ // qDebug("LEN = %d, iLen = %d",len,data->iLen);
+ //#warning "DO IT BETTER (the \r cutting)"
+ KviCString * s = new KviCString(data->buffer, len);
+ if(s->lastCharIs('\r'))
+ s->cutRight(1);
e->setData(s);
// but we cut also \n (or \0)
++aux;
// so len += 1; --> new data->iLen -= len;
data->iLen -= (len + 1);
-// qDebug("iLen now = %d",data->iLen);
+ // qDebug("iLen now = %d",data->iLen);
KVI_ASSERT(data->iLen >= 0);
if(data->iLen > 0)
{
// memmove the remaining part to the beginning
// aux points after \n or \0
- KviMemory::move(data->buffer,aux,data->iLen);
- data->buffer = (char *)KviMemory::reallocate(data->buffer,data->iLen);
+ KviMemory::move(data->buffer, aux, data->iLen);
+ data->buffer = (char *)KviMemory::reallocate(data->buffer, data->iLen);
end = data->buffer + data->iLen;
aux = data->buffer;
- } else {
+ }
+ else
+ {
// no more data in the buffer
KVI_ASSERT(data->iLen == 0);
KviMemory::free(data->buffer);
data->buffer = end = aux = 0;
}
- postEvent(parent(),e);
- } else aux++;
-// qDebug("PASSING CHAR %c",*aux);
+ postEvent(parent(), e);
+ }
+ else
+ aux++;
+ // qDebug("PASSING CHAR %c",*aux);
}
// now aux == end
if(bCritical)
@@ -265,13 +275,14 @@ bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCr
{
// in the last part there are no NULL and \n chars
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_DATA);
- KviCString * s = new KviCString(data->buffer,data->iLen);
- if(s->lastCharIs('\r'))s->cutRight(1);
+ KviCString * s = new KviCString(data->buffer, data->iLen);
+ if(s->lastCharIs('\r'))
+ s->cutRight(1);
e->setData(s);
data->iLen = 0;
KviMemory::free(data->buffer);
data->buffer = 0;
- postEvent(parent(),e);
+ postEvent(parent(), e);
}
}
return true;
@@ -279,7 +290,7 @@ bool DccVideoThread::handleIncomingData(KviDccThreadIncomingData * data,bool bCr
void DccVideoThread::restartRecording(int iDevice, int iInput, int)
{
- m_bRecording=false;
+ m_bRecording = false;
/*
if(!g_pVideoDevicePool)
g_pVideoDevicePool = Kopete::AV::VideoDevicePool::self();
@@ -291,21 +302,22 @@ void DccVideoThread::restartRecording(int iDevice, int iInput, int)
g_pVideoDevicePool->selectInput(iInput);
g_pVideoDevicePool->startCapturing();
*/
- m_bRecording=true;
+ m_bRecording = true;
}
void DccVideoThread::startRecording()
{
//qDebug("Start recording");
- if(m_bRecording)return; // already started
+ if(m_bRecording)
+ return; // already started
//ensure capturing
-// g_pVideoDevicePool->startCapturing();
+ // g_pVideoDevicePool->startCapturing();
//qDebug("Posting event");
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING));
- postEvent(DccThread::parent(),e);
+ postEvent(DccThread::parent(), e);
m_bRecording = true;
}
@@ -313,11 +325,12 @@ void DccVideoThread::startRecording()
void DccVideoThread::stopRecording()
{
//qDebug("Stop recording");
- if(!m_bRecording)return; // already stopped
+ if(!m_bRecording)
+ return; // already stopped
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_STOP_RECORDING));
- postEvent(DccThread::parent(),e);
+ postEvent(DccThread::parent(), e);
m_bRecording = false;
}
@@ -325,22 +338,24 @@ void DccVideoThread::stopRecording()
void DccVideoThread::startPlaying()
{
//qDebug("Start playing");
- if(m_bPlaying)return;
+ if(m_bPlaying)
+ return;
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_START_PLAYING));
- postEvent(DccThread::parent(),e);
+ postEvent(DccThread::parent(), e);
m_bPlaying = true;
}
void DccVideoThread::stopPlaying()
{
//qDebug("Stop playing");
- if(!m_bPlaying)return;
+ if(!m_bPlaying)
+ return;
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VIDEO_THREAD_ACTION_STOP_PLAYING));
- postEvent(DccThread::parent(),e);
+ postEvent(DccThread::parent(), e);
m_bPlaying = false;
}
@@ -356,36 +371,43 @@ void DccVideoThread::run()
{
delete e;
goto exit_dcc;
- } else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION)
+ }
+ else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION)
{
int * act = ((KviThreadDataEvent *)e)->getData();
- if(*act)startRecording();
- else stopRecording();
+ if(*act)
+ startRecording();
+ else
+ stopRecording();
delete act;
delete e;
- } else {
+ }
+ else
+ {
// Other events are senseless to us
delete e;
}
}
- if(!readWriteStep())goto exit_dcc;
- if(!videoStep())goto exit_dcc;
- if(!textStep())goto exit_dcc;
+ if(!readWriteStep())
+ goto exit_dcc;
+ if(!videoStep())
+ goto exit_dcc;
+ if(!textStep())
+ goto exit_dcc;
- usleep(FRAME_DURATION*1000);
+ usleep(FRAME_DURATION * 1000);
//qDebug("in %d out %d in_sig %d out_sig %d", m_inFrameBuffer.size(), m_outFrameBuffer.size(), m_videoInSignalBuffer.size(), m_videoOutSignalBuffer.size());
}
-
exit_dcc:
kvi_socket_close(m_fd);
m_fd = KVI_INVALID_SOCKET;
}
-DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name)
-: DccWindow(KviWindow::DccVideo,name,dcc)
+DccVideoWindow::DccVideoWindow(DccDescriptor * dcc, const char * name)
+ : DccWindow(KviWindow::DccVideo, name, dcc)
{
m_pDescriptor = dcc;
m_pSlaveThread = 0;
@@ -395,7 +417,7 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name)
m_pLabel = new KviThemedLabel(m_pButtonBox, this, "dcc_video_label");
m_pLabel->setText(name);
- m_pButtonBox->setStretchFactor(m_pLabel,1);
+ m_pButtonBox->setStretchFactor(m_pLabel, 1);
createTextEncodingButton(m_pButtonBox);
@@ -404,7 +426,7 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name)
#endif
// Central splitter
- m_pSplitter = new KviTalSplitter(Qt::Horizontal,this);
+ m_pSplitter = new KviTalSplitter(Qt::Horizontal, this);
m_pSplitter->setObjectName("dcc_video_splitter");
m_pSplitter->setChildrenCollapsible(false);
@@ -412,9 +434,9 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name)
m_pLayout = new QGridLayout(m_pContainerWidget);
m_pContainerWidget->setLayout(m_pLayout);
- m_pIrcView = new KviIrcView(this,this);
- connect(m_pIrcView,SIGNAL(rightClicked()),this,SLOT(textViewRightClicked()));
- m_pInput = new KviInput(this);
+ m_pIrcView = new KviIrcView(this, this);
+ connect(m_pIrcView, SIGNAL(rightClicked()), this, SLOT(textViewRightClicked()));
+ m_pInput = new KviInput(this);
//remote video
m_pInVideoLabel = new QLabel();
@@ -427,7 +449,7 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name)
//local video
QByteArray cameraDevice;
- if (cameraDevice.isEmpty())
+ if(cameraDevice.isEmpty())
m_pCamera = new QCamera;
else
m_pCamera = new QCamera(cameraDevice);
@@ -445,39 +467,40 @@ DccVideoWindow::DccVideoWindow(DccDescriptor * dcc,const char * name)
//local video input: config
m_pVideoLabel[0] = new QLabel();
- m_pVideoLabel[0]->setText(__tr2qs_ctx("Video device:","dcc"));
+ m_pVideoLabel[0]->setText(__tr2qs_ctx("Video device:", "dcc"));
m_pLayout->addWidget(m_pVideoLabel[0], 1, 2, 1, 1);
m_pCDevices = new QComboBox();
m_pLayout->addWidget(m_pCDevices, 2, 2, 1, 1);
m_pVideoLabel[1] = new QLabel();
- m_pVideoLabel[1]->setText(__tr2qs_ctx("Input:","dcc"));
+ m_pVideoLabel[1]->setText(__tr2qs_ctx("Input:", "dcc"));
m_pLayout->addWidget(m_pVideoLabel[1], 3, 2, 1, 1);
m_pCInputs = new QComboBox();
m_pLayout->addWidget(m_pCInputs, 4, 2, 1, 1);
m_pVideoLabel[2] = new QLabel();
- m_pVideoLabel[2]->setText(__tr2qs_ctx("Standard:","dcc"));
+ m_pVideoLabel[2]->setText(__tr2qs_ctx("Standard:", "dcc"));
m_pLayout->addWidget(m_pVideoLabel[2], 5, 2, 1, 1);
m_pCStandards = new QComboBox();
m_pLayout->addWidget(m_pCStandards, 6, 2, 1, 1);
m_pLayout->addWidget(m_pIrcView, 7, 0, 1, 3);
- m_pLayout->setRowStretch(7,1);
+ m_pLayout->setRowStretch(7, 1);
- if(KVI_OPTION_BOOL(KviOption_boolAutoLogDccChat))m_pIrcView->startLogging();
+ if(KVI_OPTION_BOOL(KviOption_boolAutoLogDccChat))
+ m_pIrcView->startLogging();
- connect(&m_Timer, SIGNAL(timeout()), this, SLOT(slotUpdateImage()) );
+ connect(&m_Timer, SIGNAL(timeout()), this, SLOT(slotUpdateImage()));
m_Timer.start(FRAME_DURATION);
m_pMarshal = new DccMarshal(this);
- connect(m_pMarshal,SIGNAL(error(KviError::Code)),this,SLOT(handleMarshalError(KviError::Code)));
- connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected()));
- connect(m_pMarshal,SIGNAL(inProgress()),this,SLOT(connectionInProgress()));
+ connect(m_pMarshal, SIGNAL(error(KviError::Code)), this, SLOT(handleMarshalError(KviError::Code)));
+ connect(m_pMarshal, SIGNAL(connected()), this, SLOT(connected()));
+ connect(m_pMarshal, SIGNAL(inProgress()), this, SLOT(connectionInProgress()));
connect(m_pCDevices, SIGNAL(currentIndexChanged(int)), this, SLOT(videoInputChanged(int)));
connect(m_pCInputs, SIGNAL(currentIndexChanged(int)), this, SLOT(videoInputChanged(int)));
@@ -492,37 +515,37 @@ DccVideoWindow::~DccVideoWindow()
if(m_pInVideoLabel)
{
delete m_pInVideoLabel;
- m_pInVideoLabel=0;
+ m_pInVideoLabel = 0;
}
if(m_pCameraView)
{
delete m_pCameraView;
- m_pCameraView=0;
+ m_pCameraView = 0;
}
if(m_pCameraImage)
{
delete m_pCameraImage;
- m_pCameraImage=0;
+ m_pCameraImage = 0;
}
if(m_pCamera)
{
delete m_pCamera;
- m_pCamera=0;
+ m_pCamera = 0;
}
if(m_pCDevices)
{
delete m_pCDevices;
- m_pCDevices=0;
+ m_pCDevices = 0;
}
if(m_pCInputs)
{
delete m_pCInputs;
- m_pCInputs=0;
+ m_pCInputs = 0;
}
if(m_pCStandards)
{
delete m_pCStandards;
- m_pCStandards=0;
+ m_pCStandards = 0;
}
if(m_pVideoLabel[0])
{
@@ -536,7 +559,7 @@ DccVideoWindow::~DccVideoWindow()
if(m_pLayout)
{
delete m_pLayout;
- m_pLayout=0;
+ m_pLayout = 0;
}
g_pDccBroker->unregisterDccWindow(this);
@@ -561,31 +584,31 @@ void DccVideoWindow::resizeEvent(QResizeEvent *)
{
int iHeight = m_pInput->heightHint();
int iHeight2 = m_pButtonBox->sizeHint().height();
- m_pButtonBox->setGeometry(0,0,width(),iHeight2);
- m_pSplitter->setGeometry(0,iHeight2,width(),height() - (iHeight + iHeight2));
- m_pInput->setGeometry(0,height() - iHeight, width(),iHeight);
+ m_pButtonBox->setGeometry(0, 0, width(), iHeight2);
+ m_pSplitter->setGeometry(0, iHeight2, width(), height() - (iHeight + iHeight2));
+ m_pInput->setGeometry(0, height() - iHeight, width(), iHeight);
}
QSize DccVideoWindow::sizeHint() const
{
QSize ret(m_pSplitter->sizeHint().width(),
- m_pContainerWidget->sizeHint().height() + m_pButtonBox->sizeHint().height());
+ m_pContainerWidget->sizeHint().height() + m_pButtonBox->sizeHint().height());
return ret;
}
void DccVideoWindow::textViewRightClicked()
{
- KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatPopupRequest,this,m_pDescriptor->idString());
+ KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatPopupRequest, this, m_pDescriptor->idString());
}
void DccVideoWindow::triggerCreationEvents()
{
- KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowCreated,this,m_pDescriptor->idString());
+ KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowCreated, this, m_pDescriptor->idString());
}
void DccVideoWindow::triggerDestructionEvents()
{
- KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowClosing,this,m_pDescriptor->idString());
+ KVS_TRIGGER_EVENT_1(KviEvent_OnDCCChatWindowClosing, this, m_pDescriptor->idString());
}
void DccVideoWindow::startConnection()
@@ -593,14 +616,16 @@ void DccVideoWindow::startConnection()
if(!(m_pDescriptor->bActive))
{
// PASSIVE CONNECTION
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC VIDEO connection","dcc"));
- KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout);
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting a passive DCC VIDEO connection", "dcc"));
+ KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout);
if(eError != KviError::Success)
handleMarshalError(eError);
- } else {
+ }
+ else
+ {
// ACTIVE CONNECTION
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC VIDEO connection","dcc"));
- KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout);
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting an active DCC VIDEO connection", "dcc"));
+ KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout);
if(eError != KviError::Success)
handleMarshalError(eError);
}
@@ -610,29 +635,34 @@ void DccVideoWindow::connectionInProgress()
{
if(m_pDescriptor->bActive)
{
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(m_pDescriptor->szIp),&(m_pDescriptor->szPort));
- } else {
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Contacting host %Q on port %Q", "dcc"), &(m_pDescriptor->szIp), &(m_pDescriptor->szPort));
+ }
+ else
+ {
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"),
- &(m_pMarshal->localIp()),&(m_pMarshal->localPort()));
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Listening on interface %Q port %Q", "dcc"),
+ &(m_pMarshal->localIp()), &(m_pMarshal->localPort()));
if(m_pDescriptor->bSendRequest)
{
- QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp;
- KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort();
-//#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)"
+ QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp;
+ KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort();
+ //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)"
struct in_addr a;
- if(KviNetUtils::stringIpToBinaryIp(ip,&a)) {
+ if(KviNetUtils::stringIpToBinaryIp(ip, &a))
+ {
ip.setNum(htonl(a.s_addr));
}
m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC VIDEO %s %Q %s %d%c",
- m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
- 0x01,m_pDescriptor->szCodec.ptr(),
- &ip,port.ptr(),m_pDescriptor->iSampleRate,0x01);
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC VIDEO (%s) request to %Q, waiting for the remote client to connect...","dcc"),
- m_pDescriptor->szCodec.ptr(),&(m_pDescriptor->szNick));
- } else output(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC VIDEO request not sent: awaiting manual connection","dcc"));
+ m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
+ 0x01, m_pDescriptor->szCodec.ptr(),
+ &ip, port.ptr(), m_pDescriptor->iSampleRate, 0x01);
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Sent DCC VIDEO (%s) request to %Q, waiting for the remote client to connect...", "dcc"),
+ m_pDescriptor->szCodec.ptr(), &(m_pDescriptor->szNick));
+ }
+ else
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC VIDEO request not sent: awaiting manual connection", "dcc"));
}
}
@@ -642,20 +672,20 @@ const QString & DccVideoWindow::target()
if(!m_pszTarget)
m_pszTarget = new QString();
- m_pszTarget->sprintf("%s@%s:%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data());
+ m_pszTarget->sprintf("%s@%s:%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data());
return *m_pszTarget;
}
-void DccVideoWindow::getBaseLogFileName(QString &buffer)
+void DccVideoWindow::getBaseLogFileName(QString & buffer)
{
- buffer.sprintf("dccvideo_%s_%s_%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data());
+ buffer.sprintf("dccvideo_%s_%s_%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data());
}
void DccVideoWindow::fillCaptionBuffers()
{
- KviCString tmp(KviCString::Format,"DCC Video %s@%s:%s %s",
- m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),
- m_pDescriptor->szLocalFileName.toUtf8().data());
+ KviCString tmp(KviCString::Format, "DCC Video %s@%s:%s %s",
+ m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(),
+ m_pDescriptor->szLocalFileName.toUtf8().data());
m_szPlainTextCaption = tmp;
}
@@ -665,17 +695,18 @@ QPixmap * DccVideoWindow::myIconPtr()
return g_pIconManager->getSmallIcon(KviIconManager::DccVoice);
}
-void DccVideoWindow::ownMessage(const QString &text, bool bUserFeedback)
+void DccVideoWindow::ownMessage(const QString & text, bool bUserFeedback)
{
if(!m_pSlaveThread)
{
- output(KVI_OUT_SYSTEMWARNING,__tr2qs_ctx("Can't send data: no active connection","dcc"));
+ output(KVI_OUT_SYSTEMWARNING, __tr2qs_ctx("Can't send data: no active connection", "dcc"));
return;
}
QByteArray szData = encodeText(text);
const char * d = szData.data();
- if(!d)return;
+ if(!d)
+ return;
#ifdef COMPILE_CRYPT_SUPPORT
if(cryptSessionInfo())
@@ -686,28 +717,28 @@ void DccVideoWindow::ownMessage(const QString &text, bool bUserFeedback)
{
KviCString encrypted;
cryptSessionInfo()->m_pEngine->setMaxEncryptLen(-1);
- switch(cryptSessionInfo()->m_pEngine->encrypt(d,encrypted))
+ switch(cryptSessionInfo()->m_pEngine->encrypt(d, encrypted))
{
case KviCryptEngine::Encrypted:
{
- KviCString buf(KviCString::Format,"%s\r\n",encrypted.ptr());
+ KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr());
m_tmpTextDataOut.append(buf.ptr(), buf.len());
if(bUserFeedback)
- g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSGCRYPTED,
- m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(),
- m_pDescriptor->szLocalHost.toUtf8().data(),text,KviConsoleWindow::NoNotifications);
+ g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSGCRYPTED,
+ m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(),
+ m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications);
}
break;
case KviCryptEngine::Encoded:
{
- KviCString buf(KviCString::Format,"%s\r\n",encrypted.ptr());
+ KviCString buf(KviCString::Format, "%s\r\n", encrypted.ptr());
m_tmpTextDataOut.append(buf.ptr(), buf.len());
if(bUserFeedback)
{
QString encr = decodeText(encrypted.ptr());
- g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG,
- m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(),
- m_pDescriptor->szLocalHost.toUtf8().data(),encr,KviConsoleWindow::NoNotifications);
+ g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG,
+ m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(),
+ m_pDescriptor->szLocalHost.toUtf8().data(), encr, KviConsoleWindow::NoNotifications);
}
}
break;
@@ -715,34 +746,36 @@ void DccVideoWindow::ownMessage(const QString &text, bool bUserFeedback)
{
QString szErr = cryptSessionInfo()->m_pEngine->lastError();
output(KVI_OUT_SYSTEMERROR,
- __tr2qs_ctx("The encryption engine was not able to encrypt the current message (%Q): %Q, no data was sent to the remote end","dcc"),
- &text,&szErr);
+ __tr2qs_ctx("The encryption engine was not able to encrypt the current message (%Q): %Q, no data was sent to the remote end", "dcc"),
+ &text, &szErr);
}
break;
}
return;
- } else {
+ }
+ else
+ {
d++; //eat the escape code
- KviCString buf(KviCString::Format,"%s\r\n",d);
+ KviCString buf(KviCString::Format, "%s\r\n", d);
QString tmp = text.right(text.length() - 1);
m_tmpTextDataOut.append(buf.ptr(), buf.len());
if(bUserFeedback)
- g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG,
- m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(),
- m_pDescriptor->szLocalHost.toUtf8().data(),tmp,KviConsoleWindow::NoNotifications);
+ g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG,
+ m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(),
+ m_pDescriptor->szLocalHost.toUtf8().data(), tmp, KviConsoleWindow::NoNotifications);
return;
}
}
}
#endif
- KviCString buf(KviCString::Format,"%s\r\n",d);
+ KviCString buf(KviCString::Format, "%s\r\n", d);
m_tmpTextDataOut.append(buf.ptr(), buf.len());
if(bUserFeedback)
- g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG,
- m_pDescriptor->szLocalNick.toUtf8().data(),m_pDescriptor->szLocalUser.toUtf8().data(),
- m_pDescriptor->szLocalHost.toUtf8().data(),text,KviConsoleWindow::NoNotifications);
+ g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG,
+ m_pDescriptor->szLocalNick.toUtf8().data(), m_pDescriptor->szLocalUser.toUtf8().data(),
+ m_pDescriptor->szLocalHost.toUtf8().data(), text, KviConsoleWindow::NoNotifications);
}
const QString & DccVideoWindow::localNick()
@@ -752,7 +785,7 @@ const QString & DccVideoWindow::localNick()
return m_szLocalNick;
}
-void DccVideoWindow::ownAction(const QString &text)
+void DccVideoWindow::ownAction(const QString & text)
{
if(m_pSlaveThread)
{
@@ -761,22 +794,27 @@ void DccVideoWindow::ownAction(const QString &text)
if(KVI_OPTION_BOOL(KviOption_boolStripMircColorsInUserMessages))
{
szTmpBuffer = KviControlCodes::stripControlBytes(text);
- } else {
+ }
+ else
+ {
szTmpBuffer = text;
}
QByteArray szData = encodeText(szTmpBuffer);
const char * d = szData.data();
- if(!d)return;
- KviCString buf(KviCString::Format,"%cACTION %s%c\r\n",0x01,d,0x01);
+ if(!d)
+ return;
+ KviCString buf(KviCString::Format, "%cACTION %s%c\r\n", 0x01, d, 0x01);
m_tmpTextDataOut.append(buf.ptr(), buf.len());
- output(KVI_OUT_ACTION,"%Q %Q",&(m_pDescriptor->szLocalNick),&szTmpBuffer);
- } else {
- output(KVI_OUT_SYSTEMWARNING,__tr2qs_ctx("Can't send data: no active connection","dcc"));
+ output(KVI_OUT_ACTION, "%Q %Q", &(m_pDescriptor->szLocalNick), &szTmpBuffer);
+ }
+ else
+ {
+ output(KVI_OUT_SYSTEMWARNING, __tr2qs_ctx("Can't send data: no active connection", "dcc"));
}
}
-bool DccVideoWindow::event(QEvent *e)
+bool DccVideoWindow::event(QEvent * e)
{
if(e->type() == KVI_THREAD_EVENT)
{
@@ -786,7 +824,7 @@ bool DccVideoWindow::event(QEvent *e)
{
KviError::Code * pError = ((KviThreadDataEvent *)e)->getData();
QString ssss = KviError::getDescription(*pError);
- output(KVI_OUT_DCCERROR,__tr2qs_ctx("ERROR: %Q","dcc"),&(ssss));
+ output(KVI_OUT_DCCERROR, __tr2qs_ctx("ERROR: %Q", "dcc"), &(ssss));
delete pError;
return true;
}
@@ -794,16 +832,16 @@ bool DccVideoWindow::event(QEvent *e)
case KVI_DCC_THREAD_EVENT_DATA:
{
KviCString * encoded = ((KviThreadDataEvent *)e)->getData();
- KviCString d=KviCString(decodeText(encoded->ptr()));
+ KviCString d = KviCString(decodeText(encoded->ptr()));
if(d.firstCharIs(0x01))
{
d.cutLeft(1);
if(d.lastCharIs(0x01))
d.cutRight(1);
- if(kvi_strEqualCIN("ACTION",d.ptr(),6))
+ if(kvi_strEqualCIN("ACTION", d.ptr(), 6))
d.cutLeft(6);
d.stripLeftWhiteSpace();
- output(KVI_OUT_ACTION,"%Q %s",&(m_pDescriptor->szNick),d.ptr());
+ output(KVI_OUT_ACTION, "%Q %s", &(m_pDescriptor->szNick), d.ptr());
if(!hasAttention(KviWindow::MainWindowIsVisible))
{
if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages))
@@ -817,10 +855,12 @@ bool DccVideoWindow::event(QEvent *e)
szMsg += " ";
szMsg += KviQString::toHtmlEscaped(QString(d.ptr()));
//qDebug("KviIrcServerParser_ctcp.cpp:975 debug: %s",szMsg.data());
- g_pApp->notifierMessage(this,KVI_OPTION_MSGTYPE(KVI_OUT_ACTION).pixId(),szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime));
+ g_pApp->notifierMessage(this, KVI_OPTION_MSGTYPE(KVI_OUT_ACTION).pixId(), szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime));
}
}
- } else {
+ }
+ else
+ {
#ifdef COMPILE_CRYPT_SUPPORT
if(KviCryptSessionInfo * cinf = cryptSessionInfo())
@@ -828,39 +868,41 @@ bool DccVideoWindow::event(QEvent *e)
if(cinf->m_bDoDecrypt)
{
KviCString decryptedStuff;
- switch(cinf->m_pEngine->decrypt(d.ptr(),decryptedStuff))
+ switch(cinf->m_pEngine->decrypt(d.ptr(), decryptedStuff))
{
case KviCryptEngine::DecryptOkWasEncrypted:
case KviCryptEngine::DecryptOkWasEncoded:
case KviCryptEngine::DecryptOkWasPlainText:
- if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage,this,QString(decryptedStuff.ptr()),m_pDescriptor->idString()))
+ if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(decryptedStuff.ptr()), m_pDescriptor->idString()))
{
- g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG,
- m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szUser.toUtf8().data(),
- m_pDescriptor->szHost.toUtf8().data(),decryptedStuff.ptr());
+ g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG,
+ m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(),
+ m_pDescriptor->szHost.toUtf8().data(), decryptedStuff.ptr());
}
delete encoded;
return true;
- break;
+ break;
default: // also case KviCryptEngine::DecryptError
{
QString szErr = cinf->m_pEngine->lastError();
output(KVI_OUT_SYSTEMERROR,
- __tr2qs_ctx("The following message appears to be encrypted, but the encryption engine failed to decode it: %Q","dcc"),
- &szErr);
+ __tr2qs_ctx("The following message appears to be encrypted, but the encryption engine failed to decode it: %Q", "dcc"),
+ &szErr);
}
break;
}
}
- } else {
+ }
+ else
+ {
#endif
// FIXME!
- if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage,this,QString(d.ptr()),m_pDescriptor->idString()))
+ if(!KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnDCCChatMessage, this, QString(d.ptr()), m_pDescriptor->idString()))
{
- g_pMainWindow->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG,
- m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szUser.toUtf8().data(),
- m_pDescriptor->szHost.toUtf8().data(),d.ptr());
+ g_pMainWindow->firstConsole()->outputPrivmsg(this, KVI_OUT_DCCCHATMSG,
+ m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szUser.toUtf8().data(),
+ m_pDescriptor->szHost.toUtf8().data(), d.ptr());
if(!hasAttention(KviWindow::MainWindowIsVisible))
{
if(KVI_OPTION_BOOL(KviOption_boolFlashDccChatWindowOnNewMessages))
@@ -870,7 +912,7 @@ bool DccVideoWindow::event(QEvent *e)
if(KVI_OPTION_BOOL(KviOption_boolPopupNotifierOnNewDccChatMessages))
{
QString szMsg = KviQString::toHtmlEscaped(QString(d.ptr()));
- g_pApp->notifierMessage(this,KviIconManager::DccChatMsg,szMsg,KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime));
+ g_pApp->notifierMessage(this, KviIconManager::DccChatMsg, szMsg, KVI_OPTION_UINT(KviOption_uintNotifierAutoHideTime));
}
}
}
@@ -885,7 +927,7 @@ bool DccVideoWindow::event(QEvent *e)
case KVI_DCC_THREAD_EVENT_MESSAGE:
{
KviCString * str = ((KviThreadDataEvent *)e)->getData();
- outputNoFmt(KVI_OUT_DCCMSG,__tr_no_xgettext_ctx(str->ptr(),"dcc"));
+ outputNoFmt(KVI_OUT_DCCMSG, __tr_no_xgettext_ctx(str->ptr(), "dcc"));
delete str;
return true;
}
@@ -896,31 +938,29 @@ bool DccVideoWindow::event(QEvent *e)
switch(*act)
{
case KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING:
-// m_pRecordingLabel->setEnabled(true);
- break;
+ // m_pRecordingLabel->setEnabled(true);
+ break;
case KVI_DCC_VIDEO_THREAD_ACTION_STOP_RECORDING:
-// m_pRecordingLabel->setEnabled(false);
- break;
+ // m_pRecordingLabel->setEnabled(false);
+ break;
case KVI_DCC_VIDEO_THREAD_ACTION_START_PLAYING:
-// m_pPlayingLabel->setEnabled(true);
- break;
+ // m_pPlayingLabel->setEnabled(true);
+ break;
case KVI_DCC_VIDEO_THREAD_ACTION_STOP_PLAYING:
-// m_pPlayingLabel->setEnabled(false);
- break;
+ // m_pPlayingLabel->setEnabled(false);
+ break;
case KVI_DCC_VIDEO_THREAD_ACTION_GRAB_FRAME:
- m_pCameraView->render( m_pCameraImage );
- break;
-
+ m_pCameraView->render(m_pCameraImage);
+ break;
}
delete act;
return true;
}
break;
default:
- qDebug("Invalid event type %d received",((KviThreadEvent *)e)->id());
- break;
+ qDebug("Invalid event type %d received", ((KviThreadEvent *)e)->id());
+ break;
}
-
}
return KviWindow::event(e);
@@ -929,18 +969,18 @@ bool DccVideoWindow::event(QEvent *e)
void DccVideoWindow::handleMarshalError(KviError::Code eError)
{
QString ssss = KviError::getDescription(eError);
- output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC Failed: %Q","dcc"),&ssss);
+ output(KVI_OUT_DCCERROR, __tr2qs_ctx("DCC Failed: %Q", "dcc"), &ssss);
}
void DccVideoWindow::connected()
{
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Connected to %Q:%Q","dcc"),
- &(m_pMarshal->remoteIp()),&(m_pMarshal->remotePort()));
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Local end is %Q:%Q","dcc"),
- &(m_pMarshal->localIp()),&(m_pMarshal->localPort()));
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Connected to %Q:%Q", "dcc"),
+ &(m_pMarshal->remoteIp()), &(m_pMarshal->remotePort()));
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Local end is %Q:%Q", "dcc"),
+ &(m_pMarshal->localIp()), &(m_pMarshal->localPort()));
if(!(m_pDescriptor->bActive))
{
- m_pDescriptor->szIp = m_pMarshal->remoteIp();
+ m_pDescriptor->szIp = m_pMarshal->remoteIp();
m_pDescriptor->szPort = m_pMarshal->remotePort();
m_pDescriptor->szHost = m_pMarshal->remoteIp();
}
@@ -950,10 +990,10 @@ void DccVideoWindow::connected()
opt->pCodec = kvi_dcc_video_get_codec(m_pDescriptor->szCodec.ptr());
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Actual codec used is '%s'","dcc"),opt->pCodec->name());
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Actual codec used is '%s'", "dcc"), opt->pCodec->name());
- m_pSlaveThread = new DccVideoThread(this,m_pMarshal->releaseSocket(),opt);
-/*
+ m_pSlaveThread = new DccVideoThread(this, m_pMarshal->releaseSocket(), opt);
+ /*
#ifndef COMPILE_DISABLE_DCC_VIDEO
if(g_pVideoDevicePool)
{
@@ -985,8 +1025,10 @@ void DccVideoWindow::startTalking()
void DccVideoWindow::startOrStopTalking(bool bStart)
{
- if(bStart)startTalking();
- else stopTalking();
+ if(bStart)
+ startTalking();
+ else
+ stopTalking();
}
void DccVideoWindow::slotUpdateImage()
@@ -997,9 +1039,9 @@ void DccVideoWindow::slotUpdateImage()
}
}
-void DccVideoWindow::videoInputChanged(int )
+void DccVideoWindow::videoInputChanged(int)
{
-// FIXME this currently leads to a segfault
-// if(m_pSlaveThread)
-// m_pSlaveThread->restartRecording(m_pCDevices->currentIndex(), m_pCInputs->currentIndex(), m_pCStandards->currentIndex());
+ // FIXME this currently leads to a segfault
+ // if(m_pSlaveThread)
+ // m_pSlaveThread->restartRecording(m_pCDevices->currentIndex(), m_pCInputs->currentIndex(), m_pCStandards->currentIndex());
}
diff --git a/src/modules/dcc/DccVideoWindow.h b/src/modules/dcc/DccVideoWindow.h
index 8f7e846c7..eca3ed97f 100644
--- a/src/modules/dcc/DccVideoWindow.h
+++ b/src/modules/dcc/DccVideoWindow.h
@@ -48,14 +48,14 @@
#include
#ifdef COMPILE_CRYPT_SUPPORT
- class KviCryptSessionInfo;
+class KviCryptSessionInfo;
#endif
class QSlider;
class DccMarshal;
#ifndef _DCC_VIDEO_CPP_
- extern bool kvi_dcc_video_is_valid_codec(const char * codecName);
+extern bool kvi_dcc_video_is_valid_codec(const char * codecName);
#endif
#define KVI_DCC_VIDEO_THREAD_ACTION_START_RECORDING 0
@@ -66,29 +66,33 @@ class DccMarshal;
typedef struct _KviDccVideoThreadOptions
{
- QString szVideoDevice;
+ QString szVideoDevice;
DccVideoCodec * pCodec;
} KviDccVideoThreadOptions;
class DccVideoThread : public DccThread
{
friend class DccVideoWindow;
+
public:
- DccVideoThread(KviWindow * wnd,kvi_socket_t fd,KviDccVideoThreadOptions * opt);
+ DccVideoThread(KviWindow * wnd, kvi_socket_t fd, KviDccVideoThreadOptions * opt);
~DccVideoThread();
+
protected:
KviDccVideoThreadOptions * m_pOpt;
- KviDataBuffer m_outFrameBuffer;
- KviDataBuffer m_inFrameBuffer;
- KviDataBuffer m_videoInSignalBuffer;
- KviDataBuffer m_textInSignalBuffer;
- KviDataBuffer m_videoOutSignalBuffer;
- KviDataBuffer m_textOutSignalBuffer;
- bool m_bPlaying;
- bool m_bRecording;
+ KviDataBuffer m_outFrameBuffer;
+ KviDataBuffer m_inFrameBuffer;
+ KviDataBuffer m_videoInSignalBuffer;
+ KviDataBuffer m_textInSignalBuffer;
+ KviDataBuffer m_videoOutSignalBuffer;
+ KviDataBuffer m_textOutSignalBuffer;
+ bool m_bPlaying;
+ bool m_bRecording;
+
protected:
- QImage m_inImage;
- QImage m_outImage;
+ QImage m_inImage;
+ QImage m_outImage;
+
protected:
bool readWriteStep();
bool videoStep();
@@ -100,48 +104,50 @@ protected:
void stopPlaying();
inline bool isPlaying() { return m_bPlaying; };
virtual void run();
- virtual bool handleIncomingData(KviDccThreadIncomingData *data,bool bCritical);
+ virtual bool handleIncomingData(KviDccThreadIncomingData * data, bool bCritical);
};
-
class DccVideoWindow : public DccWindow
{
Q_OBJECT
friend class DccVideoThread;
+
public:
- DccVideoWindow(DccDescriptor * dcc,const char * name);
+ DccVideoWindow(DccDescriptor * dcc, const char * name);
~DccVideoWindow();
+
protected:
- KviThemedLabel * m_pLabel;
- QWidget * m_pContainerWidget;
- QImage * m_pCameraImage;
- QCameraViewfinder * m_pCameraView;
- QCamera * m_pCamera;
- QLabel * m_pInVideoLabel;
- QComboBox * m_pCDevices;
- QComboBox * m_pCInputs;
- QComboBox * m_pCStandards;
- QGridLayout * m_pLayout;
- QTimer m_Timer;
- QLabel * m_pVideoLabel[3];
- QString * m_pszTarget;
- DccVideoThread * m_pSlaveThread;
- QByteArray m_tmpTextDataOut;
- QString m_szLocalNick;
+ KviThemedLabel * m_pLabel;
+ QWidget * m_pContainerWidget;
+ QImage * m_pCameraImage;
+ QCameraViewfinder * m_pCameraView;
+ QCamera * m_pCamera;
+ QLabel * m_pInVideoLabel;
+ QComboBox * m_pCDevices;
+ QComboBox * m_pCInputs;
+ QComboBox * m_pCStandards;
+ QGridLayout * m_pLayout;
+ QTimer m_Timer;
+ QLabel * m_pVideoLabel[3];
+ QString * m_pszTarget;
+ DccVideoThread * m_pSlaveThread;
+ QByteArray m_tmpTextDataOut;
+ QString m_szLocalNick;
+
protected:
virtual void triggerCreationEvents();
virtual void triggerDestructionEvents();
virtual const QString & target();
virtual void fillCaptionBuffers();
virtual QPixmap * myIconPtr();
- virtual bool event(QEvent *e);
- virtual void getBaseLogFileName(QString &buffer);
+ virtual bool event(QEvent * e);
+ virtual void getBaseLogFileName(QString & buffer);
void startTalking();
void stopTalking();
void startConnection();
virtual const QString & localNick();
- virtual void ownMessage(const QString &text, bool bUserFeedback = true);
- virtual void ownAction(const QString &text);
+ virtual void ownMessage(const QString & text, bool bUserFeedback = true);
+ virtual void ownAction(const QString & text);
virtual void resizeEvent(QResizeEvent *);
virtual QSize sizeHint() const;
protected slots:
@@ -151,8 +157,7 @@ protected slots:
void connectionInProgress();
void slotUpdateImage();
void textViewRightClicked();
- void videoInputChanged(int );
+ void videoInputChanged(int);
};
-
#endif //_VIDEO_H_
diff --git a/src/modules/dcc/DccVoiceAdpcmCodec.cpp b/src/modules/dcc/DccVoiceAdpcmCodec.cpp
index 2ac4f4156..70f2cb227 100644
--- a/src/modules/dcc/DccVoiceAdpcmCodec.cpp
+++ b/src/modules/dcc/DccVoiceAdpcmCodec.cpp
@@ -56,11 +56,9 @@
#include /*DBG*/
#ifndef __STDC__
- #define signed
+#define signed
#endif
-
-
#define ADPCM_PACKED_FRAME_SIZE_IN_BYTES 512
#define ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES 2048
#define ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS 1024
@@ -83,10 +81,10 @@ static int stepsizeTable[89] = {
15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767
};
-void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state)
+void ADPCM_compress(short indata[], char outdata[], int len, ADPCM_state * state)
{
- short *lpIn; /* Input buffer pointer */
- signed char *lpOut; /* output buffer pointer */
+ short * lpIn; /* Input buffer pointer */
+ signed char * lpOut; /* output buffer pointer */
int val; /* Current input sample value */
int sign; /* Current adpcm sign bit */
int delta; /* Current adpcm output value */
@@ -96,10 +94,10 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state)
int vpdiff; /* Current change to valpred */
int index; /* Current step change index */
int outputbuffer = 0; /* place to keep previous 4-bit value */
- int bufferstep; /* toggle between outputbuffer/output */
+ int bufferstep; /* toggle between outputbuffer/output */
lpOut = (signed char *)outdata;
- lpIn = indata;
+ lpIn = indata;
valpred = state->valprev;
index = state->index;
@@ -107,12 +105,14 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state)
bufferstep = 1;
- for ( ;len > 0;len-- ) {
+ for(; len > 0; len--)
+ {
val = *lpIn++;
// Step 1 - compute difference with previous value
diff = val - valpred;
sign = (diff < 0) ? 8 : 0;
- if(sign)diff=(-diff);
+ if(sign)
+ diff = (-diff);
// Step 2 - Divide and clamp
// Note:
// This code *approximately* computes:
@@ -124,57 +124,69 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state)
//
delta = 0;
vpdiff = (step >> 3);
- if (diff >=step){
+ if(diff >= step)
+ {
delta = 4;
diff -= step;
vpdiff += step;
}
step >>= 1;
- if (diff >= step) {
+ if(diff >= step)
+ {
delta |= 2;
diff -= step;
vpdiff += step;
}
step >>= 1;
- if ( diff >= step ) {
+ if(diff >= step)
+ {
delta |= 1;
vpdiff += step;
}
// Step 3 - Update previous value
- if(sign)valpred -= vpdiff;
- else valpred += vpdiff;
+ if(sign)
+ valpred -= vpdiff;
+ else
+ valpred += vpdiff;
// Step 4 - Clamp previous value to 16 bits
- if ( valpred > 32767 )valpred = 32767;
- else if ( valpred < -32768 )valpred = -32768;
+ if(valpred > 32767)
+ valpred = 32767;
+ else if(valpred < -32768)
+ valpred = -32768;
// Step 5 - Assemble value, update index and step values
delta |= sign;
index += indexTable[delta];
- if ( index < 0 ) index = 0;
- if ( index > 88 ) index = 88;
+ if(index < 0)
+ index = 0;
+ if(index > 88)
+ index = 88;
step = stepsizeTable[index];
// Step 6 - Output value
- if ( bufferstep )outputbuffer = (delta << 4) & 0xf0;
- else *lpOut++ = (delta & 0x0f) | outputbuffer;
+ if(bufferstep)
+ outputbuffer = (delta << 4) & 0xf0;
+ else
+ *lpOut++ = (delta & 0x0f) | outputbuffer;
bufferstep = !bufferstep;
}
// Output last step, if needed
- if (!bufferstep)*lpOut++ = outputbuffer;
+ if(!bufferstep)
+ *lpOut++ = outputbuffer;
state->valprev = valpred;
state->index = index;
}
-void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state)
+void ADPCM_uncompress(char indata[], short outdata[], int len, ADPCM_state * state)
{
- signed char *inp; /* Input buffer pointer */
- short *outp; /* output buffer pointer */
- int sign; /* Current adpcm sign bit */
- int delta; /* Current adpcm output value */
- int step; /* Stepsize */
- int valpred; /* Predicted value */
- int vpdiff; /* Current change to valpred */
- int index; /* Current step change index */
- int inputbuffer=0; /* place to keep next 4-bit value */
- int bufferstep; /* toggle between inputbuffer/input */
+ signed char * inp; /* Input buffer pointer */
+ short * outp; /* output buffer pointer */
+ int sign; /* Current adpcm sign bit */
+ int delta; /* Current adpcm output value */
+ int step; /* Stepsize */
+ int valpred; /* Predicted value */
+ int vpdiff; /* Current change to valpred */
+ int index; /* Current step change index */
+ int inputbuffer = 0; /* place to keep next 4-bit value */
+ int bufferstep; /* toggle between inputbuffer/input */
outp = outdata;
inp = (signed char *)indata;
@@ -185,10 +197,13 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state)
bufferstep = 0;
- for ( ; len > 0 ; len-- ) {
+ for(; len > 0; len--)
+ {
/* Step 1 - get the delta value */
- if ( bufferstep )delta = inputbuffer & 0xf;
- else {
+ if(bufferstep)
+ delta = inputbuffer & 0xf;
+ else
+ {
inputbuffer = *inp++;
delta = (inputbuffer >> 4) & 0xf;
}
@@ -196,8 +211,10 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state)
/* Step 2 - Find new index value (for later) */
index += indexTable[delta];
- if ( index < 0 ) index = 0;
- if ( index > 88 ) index = 88;
+ if(index < 0)
+ index = 0;
+ if(index > 88)
+ index = 88;
/* Step 3 - Separate sign and magnitude */
sign = delta & 8;
@@ -209,16 +226,23 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state)
** in adpcm_coder.
*/
vpdiff = step >> 3;
- if( delta & 4 )vpdiff += step;
- if( delta & 2 )vpdiff += step>>1;
- if( delta & 1 )vpdiff += step>>2;
+ if(delta & 4)
+ vpdiff += step;
+ if(delta & 2)
+ vpdiff += step >> 1;
+ if(delta & 1)
+ vpdiff += step >> 2;
- if(sign)valpred -= vpdiff;
- else valpred += vpdiff;
+ if(sign)
+ valpred -= vpdiff;
+ else
+ valpred += vpdiff;
/* Step 5 - clamp output value */
- if(valpred > 32767)valpred = 32767;
- else if(valpred < -32768)valpred = -32768;
+ if(valpred > 32767)
+ valpred = 32767;
+ else if(valpred < -32768)
+ valpred = -32768;
/* Step 6 - Update step value */
step = stepsizeTable[index];
@@ -231,9 +255,8 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state)
state->index = index;
}
-
DccVoiceAdpcmCodec::DccVoiceAdpcmCodec()
-: DccVoiceCodec()
+ : DccVoiceCodec()
{
m_pEncodeState = new ADPCM_state;
m_pEncodeState->index = 0;
@@ -250,9 +273,10 @@ DccVoiceAdpcmCodec::~DccVoiceAdpcmCodec()
delete m_pDecodeState;
}
-void DccVoiceAdpcmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream)
+void DccVoiceAdpcmCodec::encode(KviDataBuffer * signal, KviDataBuffer * stream)
{
- if(signal->size() < ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode
+ if(signal->size() < ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES)
+ return; // nothing to encode
char * ptr = (char *)signal->data();
@@ -265,16 +289,17 @@ void DccVoiceAdpcmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream)
while(ptr != endPtr)
{
- ADPCM_compress((short *)ptr,(char *)(stream->data() + uFrameOffset),ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS,m_pEncodeState);
+ ADPCM_compress((short *)ptr, (char *)(stream->data() + uFrameOffset), ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS, m_pEncodeState);
ptr += ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES;
uFrameOffset += ADPCM_PACKED_FRAME_SIZE_IN_BYTES;
}
signal->remove(uTotalDataCompressed);
}
-void DccVoiceAdpcmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal)
+void DccVoiceAdpcmCodec::decode(KviDataBuffer * stream, KviDataBuffer * signal)
{
- if(stream->size() < ADPCM_PACKED_FRAME_SIZE_IN_BYTES)return; // nothing to decode
+ if(stream->size() < ADPCM_PACKED_FRAME_SIZE_IN_BYTES)
+ return; // nothing to decode
char * ptr = (char *)stream->data();
@@ -288,7 +313,7 @@ void DccVoiceAdpcmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal)
while(ptr != endPtr)
{
- ADPCM_uncompress((char *)ptr,(short *)(signal->data() + uSignalOffset),ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS,m_pDecodeState);
+ ADPCM_uncompress((char *)ptr, (short *)(signal->data() + uSignalOffset), ADPCM_UNPACKED_FRAME_SIZE_IN_SHORTS, m_pDecodeState);
ptr += ADPCM_PACKED_FRAME_SIZE_IN_BYTES;
uSignalOffset += ADPCM_UNPACKED_FRAME_SIZE_IN_BYTES;
}
diff --git a/src/modules/dcc/DccVoiceAdpcmCodec.h b/src/modules/dcc/DccVoiceAdpcmCodec.h
index 4e9ece4ff..e437c18b5 100644
--- a/src/modules/dcc/DccVoiceAdpcmCodec.h
+++ b/src/modules/dcc/DccVoiceAdpcmCodec.h
@@ -50,24 +50,24 @@
typedef struct adpcm_state
{
short valprev; /* Previous output value */
- char index; /* HelpIndex into stepsize table */
+ char index; /* HelpIndex into stepsize table */
} ADPCM_state;
-
class DccVoiceAdpcmCodec : public DccVoiceCodec
{
public:
DccVoiceAdpcmCodec();
virtual ~DccVoiceAdpcmCodec();
+
private:
ADPCM_state * m_pEncodeState;
ADPCM_state * m_pDecodeState;
+
public:
- virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream);
- virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal);
+ virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream);
+ virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal);
virtual int encodedFrameSize();
virtual int decodedFrameSize();
};
-
#endif //_ADPCMCODEC_H_
diff --git a/src/modules/dcc/DccVoiceCodec.cpp b/src/modules/dcc/DccVoiceCodec.cpp
index 0784c54b3..57be1681e 100644
--- a/src/modules/dcc/DccVoiceCodec.cpp
+++ b/src/modules/dcc/DccVoiceCodec.cpp
@@ -24,7 +24,6 @@
#include "DccVoiceCodec.h"
-
#include
#include
#include
@@ -37,11 +36,11 @@ DccVoiceCodec::~DccVoiceCodec()
{
}
-void DccVoiceCodec::encode(KviDataBuffer *,KviDataBuffer *)
+void DccVoiceCodec::encode(KviDataBuffer *, KviDataBuffer *)
{
}
-void DccVoiceCodec::decode(KviDataBuffer *,KviDataBuffer *)
+void DccVoiceCodec::decode(KviDataBuffer *, KviDataBuffer *)
{
}
@@ -61,7 +60,7 @@ const char * DccVoiceCodec::name()
}
DccVoiceNullCodec::DccVoiceNullCodec()
-: DccVoiceCodec()
+ : DccVoiceCodec()
{
m_szName = "null (no compression)";
}
@@ -70,17 +69,19 @@ DccVoiceNullCodec::~DccVoiceNullCodec()
{
}
-void DccVoiceNullCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream)
+void DccVoiceNullCodec::encode(KviDataBuffer * signal, KviDataBuffer * stream)
{
- if(signal->size() < 1)return;
- stream->append(signal->data(),signal->size());
+ if(signal->size() < 1)
+ return;
+ stream->append(signal->data(), signal->size());
signal->resize(0);
}
-void DccVoiceNullCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal)
+void DccVoiceNullCodec::decode(KviDataBuffer * stream, KviDataBuffer * signal)
{
- if(stream->size() < 1)return;
- signal->append(stream->data(),stream->size());
+ if(stream->size() < 1)
+ return;
+ signal->append(stream->data(), stream->size());
stream->resize(0);
}
@@ -105,15 +106,15 @@ DccVideoCodec::~DccVideoCodec()
{
}
-void DccVideoCodec::encodeVideo(KviDataBuffer *,KviDataBuffer *)
+void DccVideoCodec::encodeVideo(KviDataBuffer *, KviDataBuffer *)
{
}
-void DccVideoCodec::encodeText(KviDataBuffer *,KviDataBuffer *)
+void DccVideoCodec::encodeText(KviDataBuffer *, KviDataBuffer *)
{
}
-void DccVideoCodec::decode(KviDataBuffer *,KviDataBuffer *,KviDataBuffer *)
+void DccVideoCodec::decode(KviDataBuffer *, KviDataBuffer *, KviDataBuffer *)
{
}
@@ -133,7 +134,7 @@ const char * DccVideoCodec::name()
}
DccVideoSJpegCodec::DccVideoSJpegCodec()
-: DccVideoCodec()
+ : DccVideoCodec()
{
m_szName = "sjpeg";
}
@@ -142,10 +143,11 @@ DccVideoSJpegCodec::~DccVideoSJpegCodec()
{
}
-void DccVideoSJpegCodec::encodeVideo(KviDataBuffer * videoSignal,KviDataBuffer * stream)
+void DccVideoSJpegCodec::encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream)
{
- if(videoSignal->size() < 1) return;
+ if(videoSignal->size() < 1)
+ return;
QImage img(videoSignal->data(), 320, 240, 1280, QImage::Format_ARGB32);
QByteArray ba;
@@ -157,65 +159,67 @@ void DccVideoSJpegCodec::encodeVideo(KviDataBuffer * videoSignal,KviDataBuffer *
img.save(&buffer, "JPEG", 20);
if(ba.size() > 0)
{
- stream->append((const unsigned char*)ba.data(),ba.size());
- }
+ stream->append((const unsigned char *)ba.data(), ba.size());
+ }
videoSignal->clear();
}
void DccVideoSJpegCodec::encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream)
{
- static unsigned const char *irct_magic_init = (unsigned const char*) "\0\0";
- static unsigned const char *irct_magic_end = (unsigned const char*) "\0\0";
+ static unsigned const char * irct_magic_init = (unsigned const char *)"\0\0";
+ static unsigned const char * irct_magic_end = (unsigned const char *)"\0\0";
- qDebug("encodeText %s %d",textSignal->data(), textSignal->size());
- if(textSignal->size() < 1) return;
- stream->append(irct_magic_init,8);
- stream->append((const unsigned char*)textSignal->data(),textSignal->size());
- stream->append(irct_magic_end,9);
+ qDebug("encodeText %s %d", textSignal->data(), textSignal->size());
+ if(textSignal->size() < 1)
+ return;
+ stream->append(irct_magic_init, 8);
+ stream->append((const unsigned char *)textSignal->data(), textSignal->size());
+ stream->append(irct_magic_end, 9);
textSignal->clear();
return;
}
-void DccVideoSJpegCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal)
+void DccVideoSJpegCodec::decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal)
{
- static unsigned const char jpg_magic_init[4] = { 0xFF, 0xD8, 0xFF, 0xE0}; //SOI + APP0
- static unsigned const char jpg_magic_end[2] = { 0xFF, 0xD9}; //EOI
-
- static unsigned const char *irct_magic_init = (unsigned const char*) "\0\0";
- static unsigned const char *irct_magic_end = (unsigned const char*) "\0\0";
+ static unsigned const char jpg_magic_init[4] = { 0xFF, 0xD8, 0xFF, 0xE0 }; //SOI + APP0
+ static unsigned const char jpg_magic_end[2] = { 0xFF, 0xD9 }; //EOI
- if(stream->size() < 1)return;
+ static unsigned const char * irct_magic_init = (unsigned const char *)"\0\0";
+ static unsigned const char * irct_magic_end = (unsigned const char *)"\0\0";
+ if(stream->size() < 1)
+ return;
int txtStart = stream->find(irct_magic_init, 8);
int txtEnd = stream->find(irct_magic_end, 9);
int jpgStart = stream->find(jpg_magic_init, 4);
- if(txtStart!=-1 && txtEnd !=-1 && txtStartremove(txtStart+8);
- int len = txtEnd - txtStart -8; //-8 irct_magic_init
- if(len>0)
+ qDebug("a txtStart %d txtEnd %d", txtStart, txtEnd);
+ stream->remove(txtStart + 8);
+ int len = txtEnd - txtStart - 8; //-8 irct_magic_init
+ if(len > 0)
{
textSignal->append(stream->data(), len);
- char*txt=(char*)malloc(len+1);
- memcpy(txt,stream->data(), len);
- txt[len]='\0';
- qDebug("a recv |%s| %d",txt,len);
+ char * txt = (char *)malloc(len + 1);
+ memcpy(txt, stream->data(), len);
+ txt[len] = '\0';
+ qDebug("a recv |%s| %d", txt, len);
}
- stream->remove(len+9);
+ stream->remove(len + 9);
}
- if(stream->size() < 1)return;
+ if(stream->size() < 1)
+ return;
jpgStart = stream->find(jpg_magic_init, 4);
int jpgEnd = stream->find(jpg_magic_end, 2);
if(jpgStart != -1 && jpgEnd != -1)
{
-// qDebug("jpgStart %d jpgEnd %d",jpgStart,jpgEnd);
+ // qDebug("jpgStart %d jpgEnd %d",jpgStart,jpgEnd);
QImage img;
//remove junk before jpeg start
if(jpgStart > 0)
@@ -227,7 +231,7 @@ void DccVideoSJpegCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSign
if(!img.isNull())
{
videoSignal->clear();
- videoSignal->append(img.bits(),img.byteCount());
+ videoSignal->append(img.bits(), img.byteCount());
}
stream->remove(len);
}
@@ -235,20 +239,20 @@ void DccVideoSJpegCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSign
txtStart = stream->find(irct_magic_init, 8);
txtEnd = stream->find(irct_magic_end, 9);
- if(txtStart!=-1 && txtEnd !=-1)
+ if(txtStart != -1 && txtEnd != -1)
{
- qDebug("b txtStart %d txtEnd %d",txtStart,txtEnd);
- stream->remove(txtStart+8);
- int len = txtEnd - txtStart -8; //-8 irct_magic_init
- if(len>0)
+ qDebug("b txtStart %d txtEnd %d", txtStart, txtEnd);
+ stream->remove(txtStart + 8);
+ int len = txtEnd - txtStart - 8; //-8 irct_magic_init
+ if(len > 0)
{
textSignal->append(stream->data(), len);
- char*txt=(char*)malloc(len+1);
- memcpy(txt,stream->data(), len);
- txt[len]='\0';
- qDebug("b recv |%s| %d",txt,len);
+ char * txt = (char *)malloc(len + 1);
+ memcpy(txt, stream->data(), len);
+ txt[len] = '\0';
+ qDebug("b recv |%s| %d", txt, len);
}
- stream->remove(len+9);
+ stream->remove(len + 9);
}
}
@@ -262,10 +266,9 @@ int DccVideoSJpegCodec::decodedFrameSize()
return 0;
}
-
#ifndef COMPILE_DISABLE_OGG_THEORA
DccVideoTheoraCodec::DccVideoTheoraCodec()
-: DccVideoCodec()
+ : DccVideoCodec()
{
m_szName = "theora";
m_pEncoder = 0;
@@ -276,38 +279,41 @@ DccVideoTheoraCodec::~DccVideoTheoraCodec()
{
if(m_pEncoder)
delete m_pEncoder;
- m_pEncoder=0;
+ m_pEncoder = 0;
if(m_pDecoder)
delete m_pDecoder;
- m_pDecoder=0;
+ m_pDecoder = 0;
}
-void DccVideoTheoraCodec::encodeVideo(KviDataBuffer * videoSignal,KviDataBuffer * stream)
+void DccVideoTheoraCodec::encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream)
{
- if(videoSignal->size() < 1) return;
+ if(videoSignal->size() < 1)
+ return;
if(!m_pEncoder)
m_pEncoder = new KviOggTheoraEncoder(stream);
- m_pEncoder->addVideoFrame((QRgb *) videoSignal->data(),videoSignal->size());
+ m_pEncoder->addVideoFrame((QRgb *)videoSignal->data(), videoSignal->size());
videoSignal->clear();
}
void DccVideoTheoraCodec::encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream)
{
- if(textSignal->size() < 1) return;
+ if(textSignal->size() < 1)
+ return;
if(!m_pEncoder)
m_pEncoder = new KviOggTheoraEncoder(stream);
- m_pEncoder->addTextFrame(textSignal->data(),textSignal->size());
+ m_pEncoder->addTextFrame(textSignal->data(), textSignal->size());
textSignal->clear();
}
-void DccVideoTheoraCodec::decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal)
+void DccVideoTheoraCodec::decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal)
{
- if(stream->size() < 1)return;
+ if(stream->size() < 1)
+ return;
if(!m_pDecoder)
m_pDecoder = new KviOggTheoraDecoder(videoSignal, textSignal);
diff --git a/src/modules/dcc/DccVoiceCodec.h b/src/modules/dcc/DccVoiceCodec.h
index 85c97de42..70e4ebddc 100644
--- a/src/modules/dcc/DccVoiceCodec.h
+++ b/src/modules/dcc/DccVoiceCodec.h
@@ -28,8 +28,8 @@
#include "KviDataBuffer.h"
#ifndef COMPILE_DISABLE_OGG_THEORA
- #include "KviOggTheoraDecoder.h"
- #include "KviOggTheoraEncoder.h"
+#include "KviOggTheoraDecoder.h"
+#include "KviOggTheoraEncoder.h"
#endif
class DccVoiceCodec
@@ -37,12 +37,14 @@ class DccVoiceCodec
public:
DccVoiceCodec();
virtual ~DccVoiceCodec();
+
protected:
KviCString m_szName;
+
public:
const char * name();
- virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream);
- virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal);
+ virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream);
+ virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal);
virtual int encodedFrameSize();
virtual int decodedFrameSize();
};
@@ -52,9 +54,10 @@ class DccVoiceNullCodec : public DccVoiceCodec
public:
DccVoiceNullCodec();
virtual ~DccVoiceNullCodec();
+
public:
- virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream);
- virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal);
+ virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream);
+ virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal);
virtual int encodedFrameSize();
virtual int decodedFrameSize();
};
@@ -64,13 +67,15 @@ class DccVideoCodec
public:
DccVideoCodec();
virtual ~DccVideoCodec();
+
protected:
KviCString m_szName;
+
public:
const char * name();
virtual void encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream);
virtual void encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream);
- virtual void decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal);
+ virtual void decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal);
virtual int encodedFrameSize();
virtual int decodedFrameSize();
};
@@ -80,10 +85,11 @@ class DccVideoSJpegCodec : public DccVideoCodec
public:
DccVideoSJpegCodec();
virtual ~DccVideoSJpegCodec();
+
public:
virtual void encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream);
virtual void encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream);
- virtual void decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal);
+ virtual void decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal);
virtual int encodedFrameSize();
virtual int decodedFrameSize();
};
@@ -94,12 +100,14 @@ class DccVideoTheoraCodec : public DccVideoCodec
public:
DccVideoTheoraCodec();
virtual ~DccVideoTheoraCodec();
+
public:
virtual void encodeVideo(KviDataBuffer * videoSignal, KviDataBuffer * stream);
virtual void encodeText(KviDataBuffer * textSignal, KviDataBuffer * stream);
- virtual void decode(KviDataBuffer * stream,KviDataBuffer * videoSignal,KviDataBuffer * textSignal);
+ virtual void decode(KviDataBuffer * stream, KviDataBuffer * videoSignal, KviDataBuffer * textSignal);
virtual int encodedFrameSize();
virtual int decodedFrameSize();
+
private:
KviOggTheoraEncoder * m_pEncoder;
KviOggTheoraDecoder * m_pDecoder;
diff --git a/src/modules/dcc/DccVoiceGsmCodec.cpp b/src/modules/dcc/DccVoiceGsmCodec.cpp
index 8f7fb6534..e2a23bb4e 100644
--- a/src/modules/dcc/DccVoiceGsmCodec.cpp
+++ b/src/modules/dcc/DccVoiceGsmCodec.cpp
@@ -27,122 +27,125 @@
#include "DccVoiceGsmCodec.h"
#ifdef COMPILE_USE_GSM
- #include
+#include
- #define GSM_PACKED_FRAME_SIZE_IN_BYTES 33
- #define GSM_UNPACKED_FRAME_SIZE_IN_BYTES 320
- #define GSM_UNPACKED_FRAME_SIZE_IN_SHORTS 160
+#define GSM_PACKED_FRAME_SIZE_IN_BYTES 33
+#define GSM_UNPACKED_FRAME_SIZE_IN_BYTES 320
+#define GSM_UNPACKED_FRAME_SIZE_IN_SHORTS 160
- void * (*gsm_session_create)() = 0;
- void (*gsm_session_destroy)(void *) = 0;
- void (*gsm_session_encode)(void *,short *,unsigned char *) = 0;
- int (*gsm_session_decode)(void *,unsigned char *,short *) = 0;
+void * (*gsm_session_create)() = 0;
+void (*gsm_session_destroy)(void *) = 0;
+void (*gsm_session_encode)(void *, short *, unsigned char *) = 0;
+int (*gsm_session_decode)(void *, unsigned char *, short *) = 0;
- void * g_pGSMCodecLibraryHandle = 0;
+void * g_pGSMCodecLibraryHandle = 0;
- bool kvi_gsm_codec_init()
- {
- if(g_pGSMCodecLibraryHandle)return true; // Already initialized
-
- g_pGSMCodecLibraryHandle = dlopen("libgsm.so",RTLD_NOW | RTLD_GLOBAL);
- if(!g_pGSMCodecLibraryHandle)return false; // no way to open it
-
- gsm_session_create = (void * (*)()) dlsym(g_pGSMCodecLibraryHandle,"gsm_create");
- gsm_session_destroy = (void (*)(void *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_destroy");
- gsm_session_encode = (void (*)(void *,short *,unsigned char *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_encode");
- gsm_session_decode = (int (*)(void *,unsigned char *,short *)) dlsym(g_pGSMCodecLibraryHandle,"gsm_decode");
-
- if(! (gsm_session_create && gsm_session_destroy && gsm_session_encode && gsm_session_decode))
- {
- dlclose(g_pGSMCodecLibraryHandle);
- g_pGSMCodecLibraryHandle = 0;
- return false;
- }
- return true;
- }
+bool kvi_gsm_codec_init()
+{
+ if(g_pGSMCodecLibraryHandle)
+ return true; // Already initialized
- void kvi_gsm_codec_done()
- {
- if(g_pGSMCodecLibraryHandle)
- {
- dlclose(g_pGSMCodecLibraryHandle);
- g_pGSMCodecLibraryHandle = 0;
- }
- }
+ g_pGSMCodecLibraryHandle = dlopen("libgsm.so", RTLD_NOW | RTLD_GLOBAL);
+ if(!g_pGSMCodecLibraryHandle)
+ return false; // no way to open it
+ gsm_session_create = (void * (*)())dlsym(g_pGSMCodecLibraryHandle, "gsm_create");
+ gsm_session_destroy = (void (*)(void *))dlsym(g_pGSMCodecLibraryHandle, "gsm_destroy");
+ gsm_session_encode = (void (*)(void *, short *, unsigned char *))dlsym(g_pGSMCodecLibraryHandle, "gsm_encode");
+ gsm_session_decode = (int (*)(void *, unsigned char *, short *))dlsym(g_pGSMCodecLibraryHandle, "gsm_decode");
- DccVoiceGsmCodec::DccVoiceGsmCodec()
- : DccVoiceCodec()
+ if(!(gsm_session_create && gsm_session_destroy && gsm_session_encode && gsm_session_decode))
{
- m_pEncodeState = gsm_session_create();
- m_pDecodeState = gsm_session_create();
- m_szName = "gsm (compression 33:320)";
+ dlclose(g_pGSMCodecLibraryHandle);
+ g_pGSMCodecLibraryHandle = 0;
+ return false;
}
+ return true;
+}
- DccVoiceGsmCodec::~DccVoiceGsmCodec()
+void kvi_gsm_codec_done()
+{
+ if(g_pGSMCodecLibraryHandle)
{
- gsm_session_destroy(m_pEncodeState);
- gsm_session_destroy(m_pDecodeState);
+ dlclose(g_pGSMCodecLibraryHandle);
+ g_pGSMCodecLibraryHandle = 0;
}
+}
- void DccVoiceGsmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream)
- {
- if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode
+DccVoiceGsmCodec::DccVoiceGsmCodec()
+ : DccVoiceCodec()
+{
+ m_pEncodeState = gsm_session_create();
+ m_pDecodeState = gsm_session_create();
+ m_szName = "gsm (compression 33:320)";
+}
- unsigned char * ptr = signal->data();
+DccVoiceGsmCodec::~DccVoiceGsmCodec()
+{
+ gsm_session_destroy(m_pEncodeState);
+ gsm_session_destroy(m_pDecodeState);
+}
- int uFrames = signal->size() / GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
- int uTotalDataCompressed = uFrames * GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
- int uFrameOffset = stream->size();
- unsigned char * endPtr = ptr + uTotalDataCompressed;
+void DccVoiceGsmCodec::encode(KviDataBuffer * signal, KviDataBuffer * stream)
+{
+ if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES)
+ return; // nothing to encode
- stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames);
+ unsigned char * ptr = signal->data();
- while(ptr != endPtr)
- {
- gsm_session_encode(m_pEncodeState,(short *)ptr,stream->data() + uFrameOffset);
- ptr += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
- uFrameOffset += GSM_PACKED_FRAME_SIZE_IN_BYTES;
- }
- signal->remove(uTotalDataCompressed);
- }
+ int uFrames = signal->size() / GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ int uTotalDataCompressed = uFrames * GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ int uFrameOffset = stream->size();
+ unsigned char * endPtr = ptr + uTotalDataCompressed;
- void DccVoiceGsmCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal)
- {
- if(stream->size() < GSM_PACKED_FRAME_SIZE_IN_BYTES)return; // nothing to decode
-
- unsigned char * ptr = stream->data();
-
- // Gsm codec
- int uFrames = stream->size() / GSM_PACKED_FRAME_SIZE_IN_BYTES;
- int uTotalDataDecompressed = uFrames * GSM_PACKED_FRAME_SIZE_IN_BYTES;
- int uSignalOffset = signal->size();
- unsigned char * endPtr = ptr + (uTotalDataDecompressed);
-
- signal->addSize(GSM_UNPACKED_FRAME_SIZE_IN_BYTES * uFrames);
-
- while(ptr != endPtr)
- {
- // We don't check the return value here
- // Well..it is either an unrecoverable internal error
- // or a broken frame...
- // but if we receive broken frames over DCC...well....better
- // check the hardware...or the remote codec as well...
- gsm_session_decode(m_pDecodeState,ptr,(short *)(signal->data() + uSignalOffset));
- ptr += GSM_PACKED_FRAME_SIZE_IN_BYTES;
- uSignalOffset += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
- }
- stream->remove(uTotalDataDecompressed);
- }
+ stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames);
- int DccVoiceGsmCodec::encodedFrameSize()
+ while(ptr != endPtr)
{
- return GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ gsm_session_encode(m_pEncodeState, (short *)ptr, stream->data() + uFrameOffset);
+ ptr += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ uFrameOffset += GSM_PACKED_FRAME_SIZE_IN_BYTES;
}
+ signal->remove(uTotalDataCompressed);
+}
+
+void DccVoiceGsmCodec::decode(KviDataBuffer * stream, KviDataBuffer * signal)
+{
+ if(stream->size() < GSM_PACKED_FRAME_SIZE_IN_BYTES)
+ return; // nothing to decode
+
+ unsigned char * ptr = stream->data();
+
+ // Gsm codec
+ int uFrames = stream->size() / GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ int uTotalDataDecompressed = uFrames * GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ int uSignalOffset = signal->size();
+ unsigned char * endPtr = ptr + (uTotalDataDecompressed);
+
+ signal->addSize(GSM_UNPACKED_FRAME_SIZE_IN_BYTES * uFrames);
- int DccVoiceGsmCodec::decodedFrameSize()
+ while(ptr != endPtr)
{
- return GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+ // We don't check the return value here
+ // Well..it is either an unrecoverable internal error
+ // or a broken frame...
+ // but if we receive broken frames over DCC...well....better
+ // check the hardware...or the remote codec as well...
+ gsm_session_decode(m_pDecodeState, ptr, (short *)(signal->data() + uSignalOffset));
+ ptr += GSM_PACKED_FRAME_SIZE_IN_BYTES;
+ uSignalOffset += GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
}
+ stream->remove(uTotalDataDecompressed);
+}
+
+int DccVoiceGsmCodec::encodedFrameSize()
+{
+ return GSM_PACKED_FRAME_SIZE_IN_BYTES;
+}
+
+int DccVoiceGsmCodec::decodedFrameSize()
+{
+ return GSM_UNPACKED_FRAME_SIZE_IN_BYTES;
+}
#endif // COMPILE_USE_GSM
diff --git a/src/modules/dcc/DccVoiceGsmCodec.h b/src/modules/dcc/DccVoiceGsmCodec.h
index 36cc1ae95..9a86de7ba 100644
--- a/src/modules/dcc/DccVoiceGsmCodec.h
+++ b/src/modules/dcc/DccVoiceGsmCodec.h
@@ -26,30 +26,31 @@
#include "kvi_settings.h"
-
#ifdef COMPILE_USE_GSM
- #include "DccVoiceCodec.h"
-
- #ifndef _GSMCODEC_CPP_
- extern bool kvi_gsm_codec_init();
- extern void kvi_gsm_codec_done();
- #endif //_GSMCODEC_CPP_
-
- class DccVoiceGsmCodec : public DccVoiceCodec
- {
- public:
- DccVoiceGsmCodec();
- virtual ~DccVoiceGsmCodec();
- private:
- void * m_pEncodeState;
- void * m_pDecodeState;
- public:
- virtual void encode(KviDataBuffer * signal,KviDataBuffer * stream);
- virtual void decode(KviDataBuffer * stream,KviDataBuffer * signal);
- virtual int encodedFrameSize();
- virtual int decodedFrameSize();
- };
+#include "DccVoiceCodec.h"
+
+#ifndef _GSMCODEC_CPP_
+extern bool kvi_gsm_codec_init();
+extern void kvi_gsm_codec_done();
+#endif //_GSMCODEC_CPP_
+
+class DccVoiceGsmCodec : public DccVoiceCodec
+{
+public:
+ DccVoiceGsmCodec();
+ virtual ~DccVoiceGsmCodec();
+
+private:
+ void * m_pEncodeState;
+ void * m_pDecodeState;
+
+public:
+ virtual void encode(KviDataBuffer * signal, KviDataBuffer * stream);
+ virtual void decode(KviDataBuffer * stream, KviDataBuffer * signal);
+ virtual int encodedFrameSize();
+ virtual int decodedFrameSize();
+};
#endif //COMPILE_USE_GSM
diff --git a/src/modules/dcc/DccVoiceWindow.cpp b/src/modules/dcc/DccVoiceWindow.cpp
index 4356a274a..0a353bfaf 100644
--- a/src/modules/dcc/DccVoiceWindow.cpp
+++ b/src/modules/dcc/DccVoiceWindow.cpp
@@ -46,14 +46,14 @@
#include
#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
- #include
- #include
- #include
- #include
- #include
- //#include "KviError.h"
- #include // for open()
- #include // for ioctl()
+#include
+#include
+#include
+#include
+#include
+//#include "KviError.h"
+#include // for open()
+#include // for ioctl()
#endif
extern DccBroker * g_pDccBroker;
@@ -61,25 +61,24 @@ extern DccBroker * g_pDccBroker;
//Check for the *SS Api....we don't want to fail here...
#ifndef COMPILE_DISABLE_DCC_VOICE
- #ifdef HAVE_LINUX_SOUNDCARD_H
- #include
- #else
- #ifdef HAVE_SYS_SOUNDCARD_H
- #include
- #else
- #ifdef HAVE_SOUNDCARD_H
- #include
- #else
- //CAN NOT COMPILE :(
- #define COMPILE_DISABLE_DCC_VOICE
- #if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
- #warning "Can't find the soundcard.h header; you will NOT be able to use DCC Voice"
- #endif
- #endif
- #endif
- #endif
+#ifdef HAVE_LINUX_SOUNDCARD_H
+#include
+#else
+#ifdef HAVE_SYS_SOUNDCARD_H
+#include
+#else
+#ifdef HAVE_SOUNDCARD_H
+#include
+#else
+//CAN NOT COMPILE :(
+#define COMPILE_DISABLE_DCC_VOICE
+#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
+#warning "Can't find the soundcard.h header; you will NOT be able to use DCC Voice"
+#endif
+#endif
+#endif
+#endif
#endif
-
//#define KVI_AUDIO_DEVICE "/dev/dsp"
// 32 fragments, 512 bytes
@@ -88,36 +87,39 @@ extern DccBroker * g_pDccBroker;
#define KVI_FORMAT AFMT_S16_LE
#define KVI_NUM_CHANNELS 1
-
bool kvi_dcc_voice_is_valid_codec(const char * codecName)
{
#ifdef COMPILE_USE_GSM
- if(kvi_strEqualCI("gsm",codecName))
+ if(kvi_strEqualCI("gsm", codecName))
{
return kvi_gsm_codec_init();
}
#endif
- if(kvi_strEqualCI("adpcm",codecName))return true;
- if(kvi_strEqualCI("null",codecName))return true;
+ if(kvi_strEqualCI("adpcm", codecName))
+ return true;
+ if(kvi_strEqualCI("null", codecName))
+ return true;
return false;
}
static DccVoiceCodec * kvi_dcc_voice_get_codec(const char * codecName)
{
#ifdef COMPILE_USE_GSM
- if(kvi_strEqualCI("gsm",codecName))
+ if(kvi_strEqualCI("gsm", codecName))
{
- if(kvi_gsm_codec_init())return new DccVoiceGsmCodec();
+ if(kvi_gsm_codec_init())
+ return new DccVoiceGsmCodec();
}
#endif
- if(kvi_strEqualCI("adpcm",codecName))return new DccVoiceAdpcmCodec();
- if(kvi_strEqualCI("null",codecName))return new DccVoiceNullCodec();
+ if(kvi_strEqualCI("adpcm", codecName))
+ return new DccVoiceAdpcmCodec();
+ if(kvi_strEqualCI("null", codecName))
+ return new DccVoiceNullCodec();
return new DccVoiceAdpcmCodec();
}
-
-DccVoiceThread::DccVoiceThread(KviWindow * wnd,kvi_socket_t fd,KviDccVoiceThreadOptions * opt)
-: DccThread(wnd,fd)
+DccVoiceThread::DccVoiceThread(KviWindow * wnd, kvi_socket_t fd, KviDccVoiceThreadOptions * opt)
+ : DccThread(wnd, fd)
{
#ifndef COMPILE_DISABLE_DCC_VOICE
m_pOpt = opt;
@@ -148,7 +150,8 @@ bool DccVoiceThread::checkSoundcard()
bool bOpened = false;
if(m_soundFd == -1)
{
- if(!openSoundcard(O_RDONLY))return false;
+ if(!openSoundcard(O_RDONLY))
+ return false;
bOpened = true;
}
@@ -156,59 +159,66 @@ bool DccVoiceThread::checkSoundcard()
m_bSoundcardChecked = true;
- if(ioctl(m_soundFd,SNDCTL_DSP_GETCAPS,&caps) < 0)
+ if(ioctl(m_soundFd, SNDCTL_DSP_GETCAPS, &caps) < 0)
{
- postMessageEvent(__tr2qs_ctx("WARNING: failed to check the soundcard duplex capabilities: if this is a half-duplex soundcard, use the DCC VOICE option to force half-duplex algorithm","dcc").toUtf8().data());
- if(bOpened)closeSoundcard();
+ postMessageEvent(__tr2qs_ctx("WARNING: failed to check the soundcard duplex capabilities: if this is a half-duplex soundcard, use the DCC VOICE option to force half-duplex algorithm", "dcc").toUtf8().data());
+ if(bOpened)
+ closeSoundcard();
return false;
}
if(!(caps & DSP_CAP_DUPLEX))
{
m_pOpt->bForceHalfDuplex = true; // the device is half duplex...use it in that way
- postMessageEvent(__tr2qs_ctx("Half-duplex soundcard detected, you will not be able to talk and listen at the same time","dcc").toUtf8().data());
+ postMessageEvent(__tr2qs_ctx("Half-duplex soundcard detected, you will not be able to talk and listen at the same time", "dcc").toUtf8().data());
}
- if(bOpened)closeSoundcard();
+ if(bOpened)
+ closeSoundcard();
return true;
#endif
}
-
bool DccVoiceThread::openSoundcard(int mode)
{
#ifdef COMPILE_DISABLE_DCC_VOICE
return false;
#else
int speed = m_pOpt->iSampleRate;
- static int chans=KVI_NUM_CHANNELS;
- static int fmt=KVI_FORMAT;
+ static int chans = KVI_NUM_CHANNELS;
+ static int fmt = KVI_FORMAT;
static int frag = KVI_SNDCTL_FRAG_SIZE;
-
if(m_soundFd != -1)
{
- if(m_soundFdMode == mode)return true; // already open
+ if(m_soundFdMode == mode)
+ return true; // already open
closeSoundcard();
}
- m_soundFd = ::open(m_pOpt->szSoundDevice.ptr(),mode | O_NONBLOCK);
- if(m_soundFd < 0)return false;
+ m_soundFd = ::open(m_pOpt->szSoundDevice.ptr(), mode | O_NONBLOCK);
+ if(m_soundFd < 0)
+ return false;
if(!m_pOpt->bForceHalfDuplex)
{
- if(ioctl(m_soundFd,SNDCTL_DSP_SETDUPLEX,0) < 0)goto exit_false;
+ if(ioctl(m_soundFd, SNDCTL_DSP_SETDUPLEX, 0) < 0)
+ goto exit_false;
}
- if(ioctl(m_soundFd,SNDCTL_DSP_SETFRAGMENT,&frag)<0)goto exit_false;
- if(ioctl(m_soundFd,SNDCTL_DSP_SETFMT,&fmt)<0)goto exit_false;
- if(ioctl(m_soundFd,SNDCTL_DSP_CHANNELS,&chans)<0)goto exit_false;
- if(ioctl(m_soundFd,SNDCTL_DSP_SPEED,&speed)<0)goto exit_false;
+ if(ioctl(m_soundFd, SNDCTL_DSP_SETFRAGMENT, &frag) < 0)
+ goto exit_false;
+ if(ioctl(m_soundFd, SNDCTL_DSP_SETFMT, &fmt) < 0)
+ goto exit_false;
+ if(ioctl(m_soundFd, SNDCTL_DSP_CHANNELS, &chans) < 0)
+ goto exit_false;
+ if(ioctl(m_soundFd, SNDCTL_DSP_SPEED, &speed) < 0)
+ goto exit_false;
if(speed != m_pOpt->iSampleRate)
{
- KviCString tmp(KviCString::Format,__tr2qs_ctx("WARNING: failed to set the requested sample rate (%d): the device used closest match (%d)","dcc").toUtf8().data(),
- m_pOpt->iSampleRate,speed);
+ KviCString tmp(KviCString::Format, __tr2qs_ctx("WARNING: failed to set the requested sample rate (%d): the device used closest match (%d)", "dcc").toUtf8().data(),
+ m_pOpt->iSampleRate, speed);
postMessageEvent(tmp.ptr());
}
@@ -216,7 +226,6 @@ bool DccVoiceThread::openSoundcard(int mode)
m_soundFdMode = mode;
-
return true;
exit_false:
@@ -228,7 +237,7 @@ exit_false:
bool DccVoiceThread::openSoundcardForWriting()
{
#ifndef COMPILE_DISABLE_DCC_VOICE
- return openSoundcardWithDuplexOption(O_WRONLY,O_RDONLY);
+ return openSoundcardWithDuplexOption(O_WRONLY, O_RDONLY);
#else
return false;
#endif
@@ -237,13 +246,13 @@ bool DccVoiceThread::openSoundcardForWriting()
bool DccVoiceThread::openSoundcardForReading()
{
#ifndef COMPILE_DISABLE_DCC_VOICE
- return openSoundcardWithDuplexOption(O_RDONLY,O_WRONLY);
+ return openSoundcardWithDuplexOption(O_RDONLY, O_WRONLY);
#else
return false;
#endif
}
-bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode,int failMode)
+bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode, int failMode)
{
#ifndef COMPILE_DISABLE_DCC_VOICE
if(m_soundFd == -1)
@@ -252,8 +261,11 @@ bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode,int failMode)
if(m_pOpt->bForceHalfDuplex)
{
// Forcing half duplex... (user option or the card does not support full duplex mode)
- if(!openSoundcard(openMode))return false;
- } else {
+ if(!openSoundcard(openMode))
+ return false;
+ }
+ else
+ {
// Try read/write open
if(!openSoundcard(O_RDWR))
{
@@ -262,15 +274,18 @@ bool DccVoiceThread::openSoundcardWithDuplexOption(int openMode,int failMode)
{
// We haven't checked the full-duplex support yet...
// Try to open in RDONLY o WRONLY mode
- if(!openSoundcard(openMode))return false;
+ if(!openSoundcard(openMode))
+ return false;
if(!checkSoundcard())
{
- postMessageEvent(__tr2qs_ctx("Oops! Failed to test the soundcard capabilities, expect problems...","dcc").toUtf8().data());
+ postMessageEvent(__tr2qs_ctx("Oops! Failed to test the soundcard capabilities, expect problems...", "dcc").toUtf8().data());
}
} // else the test has been done and it is a full duplex card that is just busy
}
}
- } else {
+ }
+ else
+ {
// Hmmm...already open
// If it is open in O_RDWR or O_WRONLY mode...it is ok for us
// but if it is open in O_RDONLY mode...we can do nothing...just wait
@@ -302,23 +317,27 @@ bool DccVoiceThread::readWriteStep()
bool bCanRead;
bool bCanWrite;
- if(kvi_select(m_fd,&bCanRead,&bCanWrite))
+ if(kvi_select(m_fd, &bCanRead, &bCanWrite))
{
if(bCanRead)
{
unsigned int actualSize = m_inFrameBuffer.size();
m_inFrameBuffer.resize(actualSize + 1024);
- int readLen = kvi_socket_recv(m_fd,(void *)(m_inFrameBuffer.data() + actualSize),1024);
+ int readLen = kvi_socket_recv(m_fd, (void *)(m_inFrameBuffer.data() + actualSize), 1024);
if(readLen > 0)
{
- if(readLen < 1024)m_inFrameBuffer.resize(actualSize + readLen);
- m_pOpt->pCodec->decode(&m_inFrameBuffer,&m_inSignalBuffer);
-//#warning "A maximum length for the signal buffer is actually needed!!!"
- } else {
- if(!handleInvalidSocketRead(readLen))return false;
+ if(readLen < 1024)
+ m_inFrameBuffer.resize(actualSize + readLen);
+ m_pOpt->pCodec->decode(&m_inFrameBuffer, &m_inSignalBuffer);
+ //#warning "A maximum length for the signal buffer is actually needed!!!"
+ }
+ else
+ {
+ if(!handleInvalidSocketRead(readLen))
+ return false;
m_inFrameBuffer.resize(actualSize);
}
- }// else {
+ } // else {
// m_uSleepTime += 100;
//}
@@ -327,21 +346,24 @@ bool DccVoiceThread::readWriteStep()
// Have somethihg to write ?
if(m_outFrameBuffer.size() > 0)
{
- int written = kvi_socket_send(m_fd,m_outFrameBuffer.data(),m_outFrameBuffer.size());
+ int written = kvi_socket_send(m_fd, m_outFrameBuffer.data(), m_outFrameBuffer.size());
if(written > 0)
{
m_outFrameBuffer.remove(written);
- } else {
- if(!handleInvalidSocketRead(written))return false;
}
- }// else {
- // m_uSleepTime += 100;
- // }
- }// else {
- // m_uSleepTime += 100;
-// }
-//#warning "Usleep here ?"
- }// else {
+ else
+ {
+ if(!handleInvalidSocketRead(written))
+ return false;
+ }
+ } // else {
+ // m_uSleepTime += 100;
+ // }
+ } // else {
+ // m_uSleepTime += 100;
+ // }
+ //#warning "Usleep here ?"
+ } // else {
// if(!(m_bPlaying || m_bRecording))
// {
// // Really NOTHING is happening...sleep a bit more
@@ -367,7 +389,7 @@ bool DccVoiceThread::soundStep()
{
// Get the number of fragments that can be written to the soundcard without blocking
- if(ioctl(m_soundFd,SNDCTL_DSP_GETOSPACE,&info) < 0)
+ if(ioctl(m_soundFd, SNDCTL_DSP_GETOSPACE, &info) < 0)
{
qDebug("get o space failed");
info.bytes = KVI_FRAGMENT_SIZE_IN_BYTES; // dummy... if this is not correct...well...we will block for 1024/16000 of a sec
@@ -378,29 +400,37 @@ bool DccVoiceThread::soundStep()
{
int toWrite = info.fragments * info.fragsize;
//qDebug("Can write %d bytes",toWrite);
- if(m_inSignalBuffer.size() < toWrite)toWrite = m_inSignalBuffer.size();
- int written = write(m_soundFd,m_inSignalBuffer.data(),toWrite);
- if(written > 0)m_inSignalBuffer.remove(written);
- else {
-//#warning "Do something for -1 here ?"
-//#warning "Usleep ?"
+ if(m_inSignalBuffer.size() < toWrite)
+ toWrite = m_inSignalBuffer.size();
+ int written = write(m_soundFd, m_inSignalBuffer.data(), toWrite);
+ if(written > 0)
+ m_inSignalBuffer.remove(written);
+ else
+ {
+ //#warning "Do something for -1 here ?"
+ //#warning "Usleep ?"
}
} //else {
- // No stuff can be written...we are running too fast ?
- // m_uSleepTime += 100; // sleep for a while
- //}
- } else {
+ // No stuff can be written...we are running too fast ?
+ // m_uSleepTime += 100; // sleep for a while
+ //}
+ }
+ else
+ {
// hmmmm....playing, but nothing to write, possible underrun or EOF
// a nice idea would be to use SNDCTL_DSP_GETODELAY here...
// but it appears to be broken on some audio devices
- if(ioctl(m_soundFd,SNDCTL_DSP_GETOSPACE,&info) < 0)info.fragstotal = info.fragments; // dummy...but what should we do ?
+ if(ioctl(m_soundFd, SNDCTL_DSP_GETOSPACE, &info) < 0)
+ info.fragstotal = info.fragments; // dummy...but what should we do ?
if(info.fragstotal == info.fragments)
{
// underrun or EOF: close the device
stopPlaying();
}
}
- } else {
+ }
+ else
+ {
// do we have anything to play ?
if(m_inSignalBuffer.size() > 0)
{
@@ -410,11 +440,13 @@ bool DccVoiceThread::soundStep()
startPlaying();
m_iLastSignalBufferSize = m_inSignalBuffer.size();
- } else {
+ }
+ else
+ {
// have stuff to play, but it's not enough to fill the pre-buffer
//
struct timeval tv;
- gettimeofday(&tv,0);
+ gettimeofday(&tv, 0);
long int sigBufferTime = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
@@ -431,16 +463,18 @@ bool DccVoiceThread::soundStep()
if((sigBufferTime - m_iLastSignalBufferTime) > preBufferTime)
{
startPlaying();
- if(m_bPlaying)m_iLastSignalBufferSize = 0;
+ if(m_bPlaying)
+ m_iLastSignalBufferSize = 0;
}
- } else {
+ }
+ else
+ {
// signal buffer size differs...we have received new packets
// and still pre-buffering
m_iLastSignalBufferSize = m_inSignalBuffer.size();
m_iLastSignalBufferTime = sigBufferTime;
}
}
-
}
}
@@ -449,16 +483,16 @@ bool DccVoiceThread::soundStep()
{
fd_set rs;
FD_ZERO(&rs);
- FD_SET(m_soundFd,&rs);
+ FD_SET(m_soundFd, &rs);
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 10;
- int ret = select(m_soundFd + 1,&rs,0,0,&tv);
+ int ret = select(m_soundFd + 1, &rs, 0, 0, &tv);
if(ret > 0)
{
// This is rather easy...
audio_buf_info info;
- if(ioctl(m_soundFd,SNDCTL_DSP_GETISPACE,&info) < 0)
+ if(ioctl(m_soundFd, SNDCTL_DSP_GETISPACE, &info) < 0)
{
qDebug("Ispace failed");
info.fragments = 0; // dummy...
@@ -478,23 +512,27 @@ bool DccVoiceThread::soundStep()
int oldSize = m_outSignalBuffer.size();
int available = info.fragments * info.fragsize;
m_outSignalBuffer.addSize(available);
- int readed = read(m_soundFd,m_outSignalBuffer.data() + oldSize,available);
+ int readed = read(m_soundFd, m_outSignalBuffer.data() + oldSize, available);
if(readed < available)
{
// huh ? ...error ?
- if(readed >= 0)m_outSignalBuffer.resize(oldSize + readed);
- else {
+ if(readed >= 0)
+ m_outSignalBuffer.resize(oldSize + readed);
+ else
+ {
if((errno == EINTR) || (errno == EAGAIN))
{
m_outSignalBuffer.resize(oldSize);
- } else {
-//#warning "Critical error...do something reasonable!"
+ }
+ else
+ {
+ //#warning "Critical error...do something reasonable!"
m_outSignalBuffer.resize(oldSize);
}
}
}
-/*
+ /*
qDebug("Signal buffer:");
for(int i=0;i<200;i+=2)
{
@@ -504,12 +542,12 @@ bool DccVoiceThread::soundStep()
}
qDebug("END\n");
*/
- m_pOpt->pCodec->encode(&m_outSignalBuffer,&m_outFrameBuffer);
+ m_pOpt->pCodec->encode(&m_outSignalBuffer, &m_outFrameBuffer);
}
- }// else {
- // Nothing to read
- // m_uSleepTime += 100;
- // }
+ } // else {
+ // Nothing to read
+ // m_uSleepTime += 100;
+ // }
}
#endif // !COMPILE_DISABLE_DCC_VOICE
@@ -520,17 +558,20 @@ void DccVoiceThread::startRecording()
{
#ifndef COMPILE_DISABLE_DCC_VOICE
//qDebug("Start recording");
- if(m_bRecording)return; // already started
+ if(m_bRecording)
+ return; // already started
if(openSoundcardForReading())
{
-// qDebug("Posting event");
+ // qDebug("Posting event");
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_START_RECORDING));
- postEvent(parent(),e);
+ postEvent(parent(), e);
m_bRecording = true;
m_bRecordingRequestPending = false;
- } else {
+ }
+ else
+ {
m_bRecordingRequestPending = true;
}
#endif
@@ -541,14 +582,16 @@ void DccVoiceThread::stopRecording()
#ifndef COMPILE_DISABLE_DCC_VOICE
//qDebug("Stop recording");
m_bRecordingRequestPending = false;
- if(!m_bRecording)return; // already stopped
+ if(!m_bRecording)
+ return; // already stopped
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_STOP_RECORDING));
- postEvent(parent(),e);
+ postEvent(parent(), e);
m_bRecording = false;
- if(!m_bPlaying)closeSoundcard();
+ if(!m_bPlaying)
+ closeSoundcard();
#endif
}
@@ -556,13 +599,14 @@ void DccVoiceThread::startPlaying()
{
#ifndef COMPILE_DISABLE_DCC_VOICE
//qDebug("Start playing");
- if(m_bPlaying)return;
+ if(m_bPlaying)
+ return;
if(openSoundcardForWriting())
{
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_START_PLAYING));
- postEvent(parent(),e);
+ postEvent(parent(), e);
m_bPlaying = true;
}
#endif
@@ -572,14 +616,16 @@ void DccVoiceThread::stopPlaying()
{
#ifndef COMPILE_DISABLE_DCC_VOICE
//qDebug("Stop playing");
- if(!m_bPlaying)return;
+ if(!m_bPlaying)
+ return;
KviThreadDataEvent * e = new KviThreadDataEvent(KVI_DCC_THREAD_EVENT_ACTION);
e->setData(new int(KVI_DCC_VOICE_THREAD_ACTION_STOP_PLAYING));
- postEvent(parent(),e);
+ postEvent(parent(), e);
m_bPlaying = false;
- if(!m_bRecording)closeSoundcard();
+ if(!m_bRecording)
+ closeSoundcard();
#endif
}
@@ -588,7 +634,7 @@ void DccVoiceThread::run()
#ifndef COMPILE_DISABLE_DCC_VOICE
for(;;)
{
-// m_uSleepTime = 0;
+ // m_uSleepTime = 0;
// Dequeue events
while(KviThreadEvent * e = dequeueEvent())
@@ -597,21 +643,28 @@ void DccVoiceThread::run()
{
delete e;
goto exit_dcc;
- } else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION)
+ }
+ else if(e->id() == KVI_DCC_THREAD_EVENT_ACTION)
{
int * act = ((KviThreadDataEvent *)e)->getData();
- if(*act)startRecording();
- else stopRecording();
+ if(*act)
+ startRecording();
+ else
+ stopRecording();
delete act;
delete e;
- } else {
+ }
+ else
+ {
// Other events are senseless to us
delete e;
}
}
- if(!readWriteStep())goto exit_dcc;
- if(!soundStep())goto exit_dcc;
+ if(!readWriteStep())
+ goto exit_dcc;
+ if(!soundStep())
+ goto exit_dcc;
m_pInfoMutex->lock();
m_iInputBufferSize = m_inSignalBuffer.size();
@@ -621,13 +674,13 @@ void DccVoiceThread::run()
// Actually the maximum that we can sleep here is
// around 500 usecs... = 0.0005 sec -> 8 bytes at 8 KHz
- // if(m_uSleepTime)usleep(m_uSleepTime);
+ // if(m_uSleepTime)usleep(m_uSleepTime);
// Start recording if the request was not fulfilled yet
- if(m_bRecordingRequestPending)startRecording();
+ if(m_bRecordingRequestPending)
+ startRecording();
}
-
exit_dcc:
#endif //! COMPILE_DISABLE_DCC_VOICE
@@ -636,24 +689,23 @@ exit_dcc:
m_fd = KVI_INVALID_SOCKET;
}
-
-DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc,const char * name)
-: DccWindow(KviWindow::DccVoice,name,dcc)
+DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc, const char * name)
+ : DccWindow(KviWindow::DccVoice, name, dcc)
{
m_pDescriptor = dcc;
m_pSlaveThread = 0;
- m_pSplitter = new KviTalSplitter(Qt::Horizontal,this);
+ m_pSplitter = new KviTalSplitter(Qt::Horizontal, this);
m_pSplitter->setObjectName("dcc_window_splitter");
- m_pIrcView = new KviIrcView(m_pSplitter,this);
+ m_pIrcView = new KviIrcView(m_pSplitter, this);
m_pHBox = new KviTalHBox(this);
KviTalVBox * vbox = new KviTalVBox(m_pHBox);
- m_pInputLabel = new QLabel(__tr2qs_ctx("Input buffer","dcc"),vbox);
+ m_pInputLabel = new QLabel(__tr2qs_ctx("Input buffer", "dcc"), vbox);
m_pInputLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel);
- m_pOutputLabel = new QLabel(__tr2qs_ctx("Output buffer","dcc"),vbox);
+ m_pOutputLabel = new QLabel(__tr2qs_ctx("Output buffer", "dcc"), vbox);
m_pOutputLabel->setFrameStyle(QFrame::Sunken | QFrame::Panel);
vbox->setSpacing(1);
@@ -673,7 +725,7 @@ DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc,const char * name)
//#warning "The volume slider should be enabled only when receiving data"
//m_pVolumeSlider = new QSlider(-100, 0, 10, 0, Qt::Vertical, m_pHBox, "dcc_voice_volume_slider");
- m_pVolumeSlider = new QSlider(Qt::Vertical,m_pHBox);
+ m_pVolumeSlider = new QSlider(Qt::Vertical, m_pHBox);
m_pVolumeSlider->setObjectName("dcc_voice_volume_slider");
m_pVolumeSlider->setMinimum(-100);
m_pVolumeSlider->setMaximum(0);
@@ -684,29 +736,29 @@ DccVoiceWindow::DccVoiceWindow(DccDescriptor * dcc,const char * name)
/* Update the tooltip */
setMixerVolume(m_pVolumeSlider->value());
m_pVolumeSlider->setMaximumWidth(16);
- m_pVolumeSlider->setMaximumHeight(2*m_pPlayingLabel->height());
+ m_pVolumeSlider->setMaximumHeight(2 * m_pPlayingLabel->height());
connect(m_pVolumeSlider, SIGNAL(valueChanged(int)), this, SLOT(setMixerVolume(int)));
m_pTalkButton = new QToolButton(m_pHBox);
m_pTalkButton->setEnabled(false);
m_pTalkButton->setCheckable(true);
QIcon iset;
- iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED)),QIcon::Normal,QIcon::Off);
- iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTED)),QIcon::Normal,QIcon::On);
+ iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED)), QIcon::Normal, QIcon::Off);
+ iset.addPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTED)), QIcon::Normal, QIcon::On);
m_pTalkButton->setIcon(iset);
- m_pTalkButton->setIconSize(QSize(32,32));
- connect(m_pTalkButton,SIGNAL(toggled(bool)),this,SLOT(startOrStopTalking(bool)));
+ m_pTalkButton->setIconSize(QSize(32, 32));
+ connect(m_pTalkButton, SIGNAL(toggled(bool)), this, SLOT(startOrStopTalking(bool)));
- m_pHBox->setStretchFactor(vbox,1);
+ m_pHBox->setStretchFactor(vbox, 1);
m_pHBox->setMargin(2);
m_pHBox->setSpacing(1);
//setFocusHandler(m_pIrcView,this);
m_pMarshal = new DccMarshal(this);
- connect(m_pMarshal,SIGNAL(error(KviError::Code)),this,SLOT(handleMarshalError(KviError::Code)));
- connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected()));
- connect(m_pMarshal,SIGNAL(inProgress()),this,SLOT(connectionInProgress()));
+ connect(m_pMarshal, SIGNAL(error(KviError::Code)), this, SLOT(handleMarshalError(KviError::Code)));
+ connect(m_pMarshal, SIGNAL(connected()), this, SLOT(connected()));
+ connect(m_pMarshal, SIGNAL(inProgress()), this, SLOT(connectionInProgress()));
m_pUpdateTimer = new QTimer();
@@ -726,24 +778,25 @@ DccVoiceWindow::~DccVoiceWindow()
KviThreadManager::killPendingEvents(this);
delete m_pUpdateTimer;
-// delete m_pDescriptor;
-// delete m_pMarshal;
+ // delete m_pDescriptor;
+ // delete m_pMarshal;
}
-
void DccVoiceWindow::startConnection()
{
if(!(m_pDescriptor->bActive))
{
// PASSIVE CONNECTION
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC VOICE connection","dcc"));
- KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout);
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting a passive DCC VOICE connection", "dcc"));
+ KviError::Code eError = m_pMarshal->dccListen(m_pDescriptor->szListenIp, m_pDescriptor->szListenPort, m_pDescriptor->bDoTimeout);
if(eError != KviError::Success)
handleMarshalError(eError);
- } else {
+ }
+ else
+ {
// ACTIVE CONNECTION
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC VOICE connection","dcc"));
- KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),m_pDescriptor->bDoTimeout);
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Attempting an active DCC VOICE connection", "dcc"));
+ KviError::Code eError = m_pMarshal->dccConnect(m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->bDoTimeout);
if(eError != KviError::Success)
handleMarshalError(eError);
}
@@ -753,29 +806,34 @@ void DccVoiceWindow::connectionInProgress()
{
if(m_pDescriptor->bActive)
{
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(m_pDescriptor->szIp),&(m_pDescriptor->szPort));
- } else {
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Contacting host %Q on port %Q", "dcc"), &(m_pDescriptor->szIp), &(m_pDescriptor->szPort));
+ }
+ else
+ {
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"),
- &(m_pMarshal->localIp()),&(m_pMarshal->localPort()));
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Listening on interface %Q port %Q", "dcc"),
+ &(m_pMarshal->localIp()), &(m_pMarshal->localPort()));
if(m_pDescriptor->bSendRequest)
{
- QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp;
- KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort();
-//#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)"
+ QString ip = !m_pDescriptor->szFakeIp.isEmpty() ? m_pDescriptor->szFakeIp : m_pDescriptor->szListenIp;
+ KviCString port = !m_pDescriptor->szFakePort.isEmpty() ? m_pDescriptor->szFakePort : m_pMarshal->localPort();
+ //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned nuumber)"
struct in_addr a;
- if(KviNetUtils::stringIpToBinaryIp(ip,&a)) {
+ if(KviNetUtils::stringIpToBinaryIp(ip, &a))
+ {
ip.setNum(htonl(a.s_addr));
}
m_pDescriptor->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC VOICE %s %Q %s %d%c",
- m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
- 0x01,m_pDescriptor->szCodec.ptr(),
- &ip,port.ptr(),m_pDescriptor->iSampleRate,0x01);
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC VOICE (%s) request to %Q, waiting for the remote client to connect...","dcc"),
- m_pDescriptor->szCodec.ptr(),&(m_pDescriptor->szNick));
- } else output(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC VOICE request not sent: awaiting manual connections","dcc"));
+ m_pDescriptor->console()->connection()->encodeText(m_pDescriptor->szNick).data(),
+ 0x01, m_pDescriptor->szCodec.ptr(),
+ &ip, port.ptr(), m_pDescriptor->iSampleRate, 0x01);
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Sent DCC VOICE (%s) request to %Q, waiting for the remote client to connect...", "dcc"),
+ m_pDescriptor->szCodec.ptr(), &(m_pDescriptor->szNick));
+ }
+ else
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("DCC VOICE request not sent: awaiting manual connections", "dcc"));
}
}
@@ -783,20 +841,20 @@ const QString & DccVoiceWindow::target()
{
// This may change on the fly...
m_szTarget.sprintf("%s@%s:%s",
- m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data());
+ m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data());
return m_szTarget;
}
-void DccVoiceWindow::getBaseLogFileName(QString &buffer)
+void DccVoiceWindow::getBaseLogFileName(QString & buffer)
{
- buffer.sprintf("dccvoice_%s_%s_%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szLocalFileName.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data());
+ buffer.sprintf("dccvoice_%s_%s_%s", m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szLocalFileName.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data());
}
void DccVoiceWindow::fillCaptionBuffers()
{
- KviCString tmp(KviCString::Format,"DCC Voice %s@%s:%s %s",
- m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(),
- m_pDescriptor->szLocalFileName.toUtf8().data());
+ KviCString tmp(KviCString::Format, "DCC Voice %s@%s:%s %s",
+ m_pDescriptor->szNick.toUtf8().data(), m_pDescriptor->szIp.toUtf8().data(), m_pDescriptor->szPort.toUtf8().data(),
+ m_pDescriptor->szLocalFileName.toUtf8().data());
m_szPlainTextCaption = tmp;
}
@@ -806,7 +864,7 @@ QPixmap * DccVoiceWindow::myIconPtr()
return g_pIconManager->getSmallIcon(KviIconManager::DccVoice);
}
-bool DccVoiceWindow::event(QEvent *e)
+bool DccVoiceWindow::event(QEvent * e)
{
if(e->type() == KVI_THREAD_EVENT)
{
@@ -816,7 +874,7 @@ bool DccVoiceWindow::event(QEvent *e)
{
KviError::Code * pError = ((KviThreadDataEvent *)e)->getData();
QString ssss = KviError::getDescription(*pError);
- output(KVI_OUT_DCCERROR,__tr2qs_ctx("ERROR: %Q","dcc"),&(ssss));
+ output(KVI_OUT_DCCERROR, __tr2qs_ctx("ERROR: %Q", "dcc"), &(ssss));
delete pError;
m_pUpdateTimer->stop();
updateInfo();
@@ -829,7 +887,7 @@ bool DccVoiceWindow::event(QEvent *e)
case KVI_DCC_THREAD_EVENT_MESSAGE:
{
KviCString * str = ((KviThreadDataEvent *)e)->getData();
- outputNoFmt(KVI_OUT_DCCMSG,__tr_no_xgettext_ctx(str->ptr(),"dcc"));
+ outputNoFmt(KVI_OUT_DCCMSG, __tr_no_xgettext_ctx(str->ptr(), "dcc"));
delete str;
return true;
}
@@ -841,26 +899,25 @@ bool DccVoiceWindow::event(QEvent *e)
{
case KVI_DCC_VOICE_THREAD_ACTION_START_RECORDING:
m_pRecordingLabel->setEnabled(true);
- break;
+ break;
case KVI_DCC_VOICE_THREAD_ACTION_STOP_RECORDING:
m_pRecordingLabel->setEnabled(false);
- break;
+ break;
case KVI_DCC_VOICE_THREAD_ACTION_START_PLAYING:
m_pPlayingLabel->setEnabled(true);
- break;
+ break;
case KVI_DCC_VOICE_THREAD_ACTION_STOP_PLAYING:
m_pPlayingLabel->setEnabled(false);
- break;
+ break;
}
delete act;
return true;
}
break;
default:
- qDebug("Invalid event type %d received",((KviThreadEvent *)e)->id());
- break;
+ qDebug("Invalid event type %d received", ((KviThreadEvent *)e)->id());
+ break;
}
-
}
return KviWindow::event(e);
@@ -874,9 +931,9 @@ void DccVoiceWindow::updateInfo()
int iOSize = m_pSlaveThread->m_iOutputBufferSize;
int iISize = m_pSlaveThread->m_iInputBufferSize;
m_pSlaveThread->m_pInfoMutex->unlock();
- KviCString tmp(KviCString::Format,__tr_ctx("Input buffer: %d bytes","dcc"),iISize);
+ KviCString tmp(KviCString::Format, __tr_ctx("Input buffer: %d bytes", "dcc"), iISize);
m_pInputLabel->setText(tmp.ptr());
- tmp.sprintf(__tr_ctx("Output buffer: %d bytes","dcc"),iOSize);
+ tmp.sprintf(__tr_ctx("Output buffer: %d bytes", "dcc"), iOSize);
m_pOutputLabel->setText(tmp.ptr());
}
}
@@ -884,8 +941,8 @@ void DccVoiceWindow::updateInfo()
void DccVoiceWindow::resizeEvent(QResizeEvent *)
{
int hght2 = m_pHBox->sizeHint().height();
- m_pHBox->setGeometry(0,0,width(),hght2);
- m_pSplitter->setGeometry(0,hght2,width(),height() - hght2);
+ m_pHBox->setGeometry(0, 0, width(), hght2);
+ m_pSplitter->setGeometry(0, hght2, width(), height() - hght2);
}
QSize DccVoiceWindow::sizeHint() const
@@ -899,7 +956,7 @@ QSize DccVoiceWindow::sizeHint() const
void DccVoiceWindow::handleMarshalError(KviError::Code eError)
{
QString ssss = KviError::getDescription(eError);
- output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC failed: %Q","dcc"),&ssss);
+ output(KVI_OUT_DCCERROR, __tr2qs_ctx("DCC failed: %Q", "dcc"), &ssss);
m_pTalkButton->setEnabled(false);
m_pTalkButton->setChecked(false);
m_pRecordingLabel->setEnabled(false);
@@ -908,36 +965,35 @@ void DccVoiceWindow::handleMarshalError(KviError::Code eError)
void DccVoiceWindow::connected()
{
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Connected to %Q:%Q","dcc"),
- &(m_pMarshal->remoteIp()),&(m_pMarshal->remotePort()));
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Local end is %Q:%Q","dcc"),
- &(m_pMarshal->localIp()),&(m_pMarshal->localPort()));
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Connected to %Q:%Q", "dcc"),
+ &(m_pMarshal->remoteIp()), &(m_pMarshal->remotePort()));
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Local end is %Q:%Q", "dcc"),
+ &(m_pMarshal->localIp()), &(m_pMarshal->localPort()));
if(!(m_pDescriptor->bActive))
{
- m_pDescriptor->szIp = m_pMarshal->remoteIp();
+ m_pDescriptor->szIp = m_pMarshal->remoteIp();
m_pDescriptor->szPort = m_pMarshal->remotePort();
m_pDescriptor->szHost = m_pMarshal->remoteIp();
}
updateCaption();
- connect(m_pUpdateTimer,SIGNAL(timeout()),this,SLOT(updateInfo()));
+ connect(m_pUpdateTimer, SIGNAL(timeout()), this, SLOT(updateInfo()));
m_pUpdateTimer->start(1000);
KviDccVoiceThreadOptions * opt = new KviDccVoiceThreadOptions;
-
opt->pCodec = kvi_dcc_voice_get_codec(m_pDescriptor->szCodec.ptr());
- output(KVI_OUT_DCCMSG,__tr2qs_ctx("Actual codec used is '%s'","dcc"),opt->pCodec->name());
+ output(KVI_OUT_DCCMSG, __tr2qs_ctx("Actual codec used is '%s'", "dcc"), opt->pCodec->name());
opt->bForceHalfDuplex = KVI_OPTION_BOOL(KviOption_boolDccVoiceForceHalfDuplex);
-// opt->bForceDummyReadTrigger = false;
+ // opt->bForceDummyReadTrigger = false;
opt->iPreBufferSize = KVI_OPTION_UINT(KviOption_uintDccVoicePreBufferSize);
opt->szSoundDevice = KVI_OPTION_STRING(KviOption_stringDccVoiceSoundDevice).toUtf8().data();
opt->iSampleRate = m_pDescriptor->iSampleRate;
- m_pSlaveThread = new DccVoiceThread(this,m_pMarshal->releaseSocket(),opt);
- connect(m_pUpdateTimer,SIGNAL(timeout()),this,SLOT(updateInfo()));
+ m_pSlaveThread = new DccVoiceThread(this, m_pMarshal->releaseSocket(), opt);
+ connect(m_pUpdateTimer, SIGNAL(timeout()), this, SLOT(updateInfo()));
m_pSlaveThread->start();
m_pTalkButton->setEnabled(true);
@@ -959,8 +1015,10 @@ void DccVoiceWindow::startTalking()
void DccVoiceWindow::startOrStopTalking(bool bStart)
{
- if(bStart)startTalking();
- else stopTalking();
+ if(bStart)
+ startTalking();
+ else
+ stopTalking();
}
int DccVoiceWindow::getMixerVolume(void) const
@@ -978,14 +1036,14 @@ int DccVoiceWindow::getMixerVolume(void) const
req = KVI_OPTION_BOOL(KviOption_boolDccVoiceVolumeSliderControlsPCM) ? SOUND_MIXER_READ_PCM : SOUND_MIXER_READ_VOLUME;
- if(::ioctl(fd,req,&ret))
+ if(::ioctl(fd, req, &ret))
{
::close(fd);
return 0;
}
left = (ret & 0x00ff);
-// right = (ret & 0xff00) >> 8;
+ // right = (ret & 0xff00) >> 8;
::close(fd);
@@ -1011,17 +1069,16 @@ void DccVoiceWindow::setMixerVolume(int vol)
::ioctl(fd, req, &val);
::close(fd);
- m_pVolumeSlider->setToolTip(__tr2qs_ctx("Volume: %1","dcc").arg(-vol));
+ m_pVolumeSlider->setToolTip(__tr2qs_ctx("Volume: %1", "dcc").arg(-vol));
#endif
}
-
/* The code below doesn't work. Guess I have to catch some other widget's focusInEvent. Which one ? */
/* The point is to move the volume slider to correct position if for example user switched to
* another KVirc window, fired up xmms, changed the volume, and returned to our dcc voice window */
-void DccVoiceWindow::focusInEvent(QFocusEvent *e)
+void DccVoiceWindow::focusInEvent(QFocusEvent * e)
{
-// qDebug("focusInEvent()");
+ // qDebug("focusInEvent()");
m_pVolumeSlider->setValue(getMixerVolume());
setMixerVolume(m_pVolumeSlider->value());
diff --git a/src/modules/dcc/DccVoiceWindow.h b/src/modules/dcc/DccVoiceWindow.h
index d641c766e..bc37ffecb 100644
--- a/src/modules/dcc/DccVoiceWindow.h
+++ b/src/modules/dcc/DccVoiceWindow.h
@@ -43,7 +43,7 @@ class QSlider;
class DccMarshal;
#ifndef _DCC_VOICE_CPP_
- extern bool kvi_dcc_voice_is_valid_codec(const char * codecName);
+extern bool kvi_dcc_voice_is_valid_codec(const char * codecName);
#endif
#define KVI_DCC_VOICE_THREAD_ACTION_START_RECORDING 0
@@ -53,42 +53,45 @@ class DccMarshal;
typedef struct _KviDccVoiceThreadOptions
{
- bool bForceHalfDuplex;
- int iPreBufferSize;
- int iSampleRate;
- KviCString szSoundDevice;
+ bool bForceHalfDuplex;
+ int iPreBufferSize;
+ int iSampleRate;
+ KviCString szSoundDevice;
DccVoiceCodec * pCodec;
} KviDccVoiceThreadOptions;
class DccVoiceThread : public DccThread
{
friend class DccVoiceWindow;
+
public:
- DccVoiceThread(KviWindow * wnd,kvi_socket_t fd,KviDccVoiceThreadOptions * opt);
+ DccVoiceThread(KviWindow * wnd, kvi_socket_t fd, KviDccVoiceThreadOptions * opt);
~DccVoiceThread();
+
protected:
-// bool m_bUseGsm;
+ // bool m_bUseGsm;
KviDccVoiceThreadOptions * m_pOpt;
- int m_soundFd;
- int m_soundFdMode;
- KviDataBuffer m_outFrameBuffer;
- KviDataBuffer m_inFrameBuffer;
- KviDataBuffer m_inSignalBuffer;
- KviDataBuffer m_outSignalBuffer;
- bool m_bPlaying;
- bool m_bRecording;
- bool m_bRecordingRequestPending;
- bool m_bSoundcardChecked;
- int m_iLastSignalBufferSize;
- long m_iLastSignalBufferTime;
-// unsigned int m_uSleepTime;
- KviMutex * m_pInfoMutex;
+ int m_soundFd;
+ int m_soundFdMode;
+ KviDataBuffer m_outFrameBuffer;
+ KviDataBuffer m_inFrameBuffer;
+ KviDataBuffer m_inSignalBuffer;
+ KviDataBuffer m_outSignalBuffer;
+ bool m_bPlaying;
+ bool m_bRecording;
+ bool m_bRecordingRequestPending;
+ bool m_bSoundcardChecked;
+ int m_iLastSignalBufferSize;
+ long m_iLastSignalBufferTime;
+ // unsigned int m_uSleepTime;
+ KviMutex * m_pInfoMutex;
// stuff protected by the mutex:
- int m_iInputBufferSize;
- int m_iOutputBufferSize;
+ int m_iInputBufferSize;
+ int m_iOutputBufferSize;
+
protected:
bool checkSoundcard();
- bool openSoundcardWithDuplexOption(int openMode,int failMode);
+ bool openSoundcardWithDuplexOption(int openMode, int failMode);
bool openSoundcard(int mode);
bool openSoundcardForWriting();
bool openSoundcardForReading();
@@ -102,33 +105,34 @@ protected:
virtual void run();
};
-
class DccVoiceWindow : public DccWindow
{
Q_OBJECT
public:
- DccVoiceWindow(DccDescriptor * dcc,const char * name);
+ DccVoiceWindow(DccDescriptor * dcc, const char * name);
~DccVoiceWindow();
+
protected:
- KviTalHBox * m_pHBox;
- QSlider * m_pVolumeSlider;
- QLabel * m_pInputLabel;
- QLabel * m_pOutputLabel;
- QLabel * m_pRecordingLabel;
- QLabel * m_pPlayingLabel;
- QToolButton * m_pTalkButton;
- QTimer * m_pUpdateTimer;
- QString m_szTarget;
- DccVoiceThread * m_pSlaveThread;
+ KviTalHBox * m_pHBox;
+ QSlider * m_pVolumeSlider;
+ QLabel * m_pInputLabel;
+ QLabel * m_pOutputLabel;
+ QLabel * m_pRecordingLabel;
+ QLabel * m_pPlayingLabel;
+ QToolButton * m_pTalkButton;
+ QTimer * m_pUpdateTimer;
+ QString m_szTarget;
+ DccVoiceThread * m_pSlaveThread;
+
protected:
virtual void focusInEvent(QFocusEvent *);
virtual const QString & target();
virtual void fillCaptionBuffers();
virtual QPixmap * myIconPtr();
- virtual void resizeEvent(QResizeEvent *e);
+ virtual void resizeEvent(QResizeEvent * e);
virtual QSize sizeHint() const;
- virtual bool event(QEvent *e);
- virtual void getBaseLogFileName(QString &buffer);
+ virtual bool event(QEvent * e);
+ virtual void getBaseLogFileName(QString & buffer);
void startTalking();
void stopTalking();
void startConnection();
@@ -140,7 +144,7 @@ protected slots:
void startOrStopTalking(bool bStart);
void setMixerVolume(int);
void connectionInProgress();
-// void stopTalking();
+ // void stopTalking();
};
#if 0
@@ -437,7 +441,6 @@ void KviVoiceConference::conferenceThread()
// read raw audio data at sample rate X, sample size Y
// multiplex data always at this sample rate and sample size
-
#endif
#endif //_VOICE_H_
diff --git a/src/modules/dcc/DccWindow.cpp b/src/modules/dcc/DccWindow.cpp
index 3f4b47994..e9eb2c597 100644
--- a/src/modules/dcc/DccWindow.cpp
+++ b/src/modules/dcc/DccWindow.cpp
@@ -26,20 +26,22 @@
#include "KviTalHBox.h"
-DccWindow::DccWindow(KviWindow::Type eType,const char * name,DccDescriptor * d)
-: KviWindow(eType,name, d->console())
+DccWindow::DccWindow(KviWindow::Type eType, const char * name, DccDescriptor * d)
+ : KviWindow(eType, name, d->console())
{
m_pDescriptor = d;
m_pDescriptor->setWindow(this);
- m_pMarshal = 0;
+ m_pMarshal = 0;
m_pButtonBox = new KviTalHBox(this);
createTextEncodingButton(m_pButtonBox);
}
DccWindow::~DccWindow()
{
- if(m_pMarshal)delete m_pMarshal;
- if(m_pDescriptor)delete m_pDescriptor;
+ if(m_pMarshal)
+ delete m_pMarshal;
+ if(m_pDescriptor)
+ delete m_pDescriptor;
}
KviWindow * DccWindow::dccMarshalOutputWindow()
diff --git a/src/modules/dcc/DccWindow.h b/src/modules/dcc/DccWindow.h
index 58d6f3355..31a4710fd 100644
--- a/src/modules/dcc/DccWindow.h
+++ b/src/modules/dcc/DccWindow.h
@@ -35,17 +35,19 @@ class DccWindow : public KviWindow, public DccMarshalOutputContext
{
Q_OBJECT
public:
- DccWindow(KviWindow::Type eType,const char * name,DccDescriptor * d);
+ DccWindow(KviWindow::Type eType, const char * name, DccDescriptor * d);
~DccWindow();
+
protected:
- DccDescriptor * m_pDescriptor;
- DccMarshal * m_pMarshal;
+ DccDescriptor * m_pDescriptor;
+ DccMarshal * m_pMarshal;
+
public:
- DccDescriptor * descriptor() { return m_pDescriptor; };
- const DccMarshal * marshal() { return m_pMarshal; };
- virtual DccThread * getSlaveThread() { return 0; };
- virtual KviWindow * dccMarshalOutputWindow();
- virtual const char * dccMarshalOutputContextString();
+ DccDescriptor * descriptor() { return m_pDescriptor; };
+ const DccMarshal * marshal() { return m_pMarshal; };
+ virtual DccThread * getSlaveThread() { return 0; };
+ virtual KviWindow * dccMarshalOutputWindow();
+ virtual const char * dccMarshalOutputContextString();
};
#endif //_WINDOW_H_
diff --git a/src/modules/dcc/canvaswidget.cpp b/src/modules/dcc/canvaswidget.cpp
index 4660c3173..e89326c49 100644
--- a/src/modules/dcc/canvaswidget.cpp
+++ b/src/modules/dcc/canvaswidget.cpp
@@ -25,1035 +25,1124 @@
#include "canvaswidget.h"
#ifdef COMPILE_DCC_CANVAS
- #include "KviCString.h"
- #include "KviLocale.h"
+#include "KviCString.h"
+#include "KviLocale.h"
- #include
- #include
- #include
- #include
- #include
- #include
+#include
+#include
+#include
+#include
+#include
+#include
- #include
- #include
+#include
+#include
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasRectangleItem
- //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasRectangleItem
+//
- KviCanvasRectangleItem::KviCanvasRectangleItem(QCanvas * c,int x,int y,int w,int h)
- : QCanvasRectangle(x,y,w,h,c)
- {
- }
+KviCanvasRectangleItem::KviCanvasRectangleItem(QCanvas * c, int x, int y, int w, int h)
+ : QCanvasRectangle(x, y, w, h, c)
+{
+}
- KviCanvasRectangleItem::~KviCanvasRectangleItem()
- {
- }
+KviCanvasRectangleItem::~KviCanvasRectangleItem()
+{
+}
- void KviCanvasRectangleItem::drawSelection(QPainter &p)
+void KviCanvasRectangleItem::drawSelection(QPainter & p)
+{
+ p.setRasterOp(NotROP);
+ p.fillRect((int)x() + 1, (int)y() + 1, width() - 2, height() - 2, QBrush(Dense6Pattern));
+ p.setPen(QPen(DotLine));
+ p.drawRect((int)x(), (int)y(), width(), height());
+ p.setRasterOp(CopyROP);
+}
+
+void KviCanvasRectangleItem::setProperty(const QString & property, const QVariant & val)
+{
+ if(m_properties[property].isValid())
{
- p.setRasterOp(NotROP);
- p.fillRect((int)x() + 1,(int)y() + 1,width() - 2,height() - 2,QBrush(Dense6Pattern));
- p.setPen(QPen(DotLine));
- p.drawRect((int)x(),(int)y(),width(),height());
- p.setRasterOp(CopyROP);
+ m_properties.replace(property, val);
+ hide();
+ show();
}
+}
- void KviCanvasRectangleItem::setProperty(const QString &property,const QVariant &val)
- {
- if(m_properties[property].isValid())
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasPolygon
+//
+KviCanvasPolygon::KviCanvasPolygon(QCanvas * c, int x, int y, QPointArray & pnts, double dScaleFactor)
+ : QCanvasPolygon(c)
+{
+ m_properties.insert("clrForeground", QVariant(QColor(0, 0, 0)));
+ m_properties.insert("uLineWidth", QVariant((unsigned int)0));
+
+ m_properties.insert("clrBackground", QVariant(QColor(0, 0, 0)));
+ m_properties.insert("bHasBackground", QVariant(false, 1));
+
+ m_dScaleFactor = dScaleFactor;
+ m_points = pnts;
+
+ resetPoints();
+ move(x, y);
+}
+
+KviCanvasPolygon::~KviCanvasPolygon()
+{
+}
+
+void KviCanvasPolygon::setScaleFactor(double dScaleFactor)
+{
+ m_dScaleFactor = dScaleFactor;
+ resetPoints();
+}
+
+void KviCanvasPolygon::setInternalPoints(const QPointArray & pnts)
+{
+ m_points = pnts;
+ resetPoints();
+}
+
+void KviCanvasPolygon::resetPoints()
+{
+ QPointArray scaled(m_points.size());
+ for(unsigned int i = 0; i < m_points.size(); i++)
+ {
+ int px;
+ int py;
+ m_points.point(i, &px, &py);
+ px = (int)(px * m_dScaleFactor);
+ py = (int)(py * m_dScaleFactor);
+ scaled.setPoint(i, px, py);
+ }
+ setPoints(scaled);
+}
+
+int KviCanvasPolygon::rtti() const
+{
+ return KVI_CANVAS_RTTI_POLYGON;
+}
+
+void KviCanvasPolygon::setProperty(const QString & property, const QVariant & val)
+{
+ if(m_properties[property].isValid())
+ {
+ m_properties.replace(property, val);
+ if((property == "clrForeground") || (property == "uLineWidth"))
+ {
+ setPen(QPen(m_properties["clrForeground"].asColor(), m_properties["uLineWidth"].toInt()));
+ }
+ else if((property == "clrBackground") || (property == "bHasBackground"))
+ {
+ if(m_properties["bHasBackground"].asBool())
+ setBrush(QBrush(m_properties["clrBackground"].asColor()));
+ else
+ setBrush(QBrush());
+ }
+ else
{
- m_properties.replace(property,val);
hide();
show();
}
}
+}
-
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasPolygon
- //
- KviCanvasPolygon::KviCanvasPolygon(QCanvas * c,int x,int y,QPointArray &pnts,double dScaleFactor)
- : QCanvasPolygon(c)
+void KviCanvasPolygon::draw(QPainter & p)
+{
+ if(isEnabled())
{
- m_properties.insert("clrForeground",QVariant(QColor(0,0,0)));
- m_properties.insert("uLineWidth",QVariant((unsigned int)0));
-
- m_properties.insert("clrBackground",QVariant(QColor(0,0,0)));
- m_properties.insert("bHasBackground",QVariant(false,1));
-
- m_dScaleFactor = dScaleFactor;
- m_points = pnts;
-
- resetPoints();
- move(x,y);
+ p.setBrush(brush());
+ p.setPen(pen());
+ p.drawPolygon(areaPoints());
}
- KviCanvasPolygon::~KviCanvasPolygon()
+ if(isSelected())
{
+ p.setRasterOp(NotROP);
+ p.setPen(QPen(DotLine));
+ p.drawPolygon(areaPoints());
+ p.setBrush(QBrush());
+ double dVal = 10;
+ p.drawEllipse((int)(x() - dVal), (int)(y() - dVal), (int)(dVal * 2), (int)(dVal * 2));
+ p.drawLine((int)(x() - (dVal * 2)), (int)y(), (int)(x() + (dVal * 2)), (int)y());
+ p.drawLine((int)x(), (int)(y() - (dVal * 2)), (int)x(), (int)(y() + (dVal * 2)));
+ p.setRasterOp(CopyROP);
+ canvas()->setChanged(QRect((int)(x() - dVal), (int)(y() - dVal), (int)(dVal * 4), (int)(dVal * 4)));
}
+}
- void KviCanvasPolygon::setScaleFactor(double dScaleFactor)
- {
- m_dScaleFactor = dScaleFactor;
- resetPoints();
- }
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasEllipticItem
+//
- void KviCanvasPolygon::setInternalPoints(const QPointArray &pnts)
- {
- m_points = pnts;
- resetPoints();
+KviCanvasEllipticItem::KviCanvasEllipticItem(QCanvas * c, int x, int y, int w, int h)
+ : KviCanvasRectangleItem(c, x, y, w, h)
+{
+ m_properties.insert("clrForeground", QVariant(QColor(0, 0, 0)));
+ m_properties.insert("uLineWidth", QVariant((unsigned int)0));
- }
+ m_properties.insert("clrBackground", QVariant(QColor(0, 0, 0)));
+ m_properties.insert("bHasBackground", QVariant(false, 1));
- void KviCanvasPolygon::resetPoints()
- {
- QPointArray scaled(m_points.size());
- for(unsigned int i=0;isetChanged(QRect((int)(x() - dVal),(int)(y() - dVal),(int)(dVal * 4),(int)(dVal * 4)));
+ hide();
+ show();
}
}
+}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasEllipticItem
- //
-
- KviCanvasEllipticItem::KviCanvasEllipticItem(QCanvas * c,int x,int y,int w,int h)
- : KviCanvasRectangleItem(c,x,y,w,h)
- {
- m_properties.insert("clrForeground",QVariant(QColor(0,0,0)));
- m_properties.insert("uLineWidth",QVariant((unsigned int)0));
+int KviCanvasEllipticItem::rtti() const
+{
+ return KVI_CANVAS_RTTI_ELLIPSE;
+}
- m_properties.insert("clrBackground",QVariant(QColor(0,0,0)));
- m_properties.insert("bHasBackground",QVariant(false,1));
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasEllipse
+//
- // m_properties.insert("iStartAngle",QVariant(0));
- // m_properties.insert("iEndAngle",QVariant(360));
- }
+KviCanvasEllipse::KviCanvasEllipse(QCanvas * c, int x, int y, int w, int h)
+ : KviCanvasEllipticItem(c, x, y, w, h)
+{
+}
- KviCanvasEllipticItem::~KviCanvasEllipticItem()
- {
- }
+KviCanvasEllipse::~KviCanvasEllipse()
+{
+}
- void KviCanvasEllipticItem::draw(QPainter &p)
- {
- if(isEnabled())
- {
- QBrush b = p.brush();
- if(m_properties["bHasBackground"].asBool())p.setBrush(m_properties["clrBackground"].asColor());
- else p.setBrush(QBrush());
- p.setPen(pen());
- drawContent(p);
- p.setBrush(b);
- }
+int KviCanvasEllipse::rtti() const
+{
+ return KVI_CANVAS_RTTI_ELLIPSE;
+}
- if(isSelected())drawSelection(p);
- }
+void KviCanvasEllipse::drawContent(QPainter & p)
+{
+ p.drawEllipse((int)x(), (int)y(), width(), height());
+}
- void KviCanvasEllipticItem::drawContent(QPainter &p)
- {
- }
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasPie
+//
- void KviCanvasEllipticItem::setProperty(const QString & property,const QVariant &val)
- {
- if(m_properties[property].isValid())
+KviCanvasPie::KviCanvasPie(QCanvas * c, int x, int y, int w, int h)
+ : KviCanvasEllipticItem(c, x, y, w, h)
+{
+ m_properties.insert("iStartAngle", QVariant((int)0));
+ m_properties.insert("iExtensionAngle", QVariant((int)360));
+}
+
+KviCanvasPie::~KviCanvasPie()
+{
+}
+
+int KviCanvasPie::rtti() const
+{
+ return KVI_CANVAS_RTTI_PIE;
+}
+
+void KviCanvasPie::drawContent(QPainter & p)
+{
+ int iStartAngle = m_properties["iStartAngle"].asInt() * 16;
+ int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16;
+ p.drawPie((int)x(), (int)y(), width(), height(), iStartAngle, iEndAngle);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasChord
+//
+KviCanvasChord::KviCanvasChord(QCanvas * c, int x, int y, int w, int h)
+ : KviCanvasEllipticItem(c, x, y, w, h)
+{
+ m_properties.insert("iStartAngle", QVariant((int)0));
+ m_properties.insert("iExtensionAngle", QVariant((int)360));
+}
+
+KviCanvasChord::~KviCanvasChord()
+{
+}
+
+int KviCanvasChord::rtti() const
+{
+ return KVI_CANVAS_RTTI_CHORD;
+}
+
+void KviCanvasChord::drawContent(QPainter & p)
+{
+ int iStartAngle = m_properties["iStartAngle"].asInt() * 16;
+ int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16;
+ p.drawChord((int)x(), (int)y(), width(), height(), iStartAngle, iEndAngle);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasRectangle
+//
+KviCanvasRectangle::KviCanvasRectangle(QCanvas * c, int x, int y, int w, int h)
+ : KviCanvasRectangleItem(c, x, y, w, h)
+{
+ m_properties.insert("clrForeground", QVariant(QColor(0, 0, 0)));
+ m_properties.insert("uLineWidth", QVariant((unsigned int)0));
+
+ m_properties.insert("clrBackground", QVariant(QColor(0, 0, 0)));
+ m_properties.insert("bHasBackground", QVariant(false, 1));
+}
+
+KviCanvasRectangle::~KviCanvasRectangle()
+{
+}
+
+int KviCanvasRectangle::rtti() const
+{
+ return KVI_CANVAS_RTTI_RECTANGLE;
+}
+
+void KviCanvasRectangle::setProperty(const QString & property, const QVariant & val)
+{
+ if(m_properties[property].isValid())
+ {
+ m_properties.replace(property, val);
+ if((property == "clrForeground") || (property == "uLineWidth"))
{
- m_properties.replace(property,val);
- if((property == "clrForeground") || (property == "uLineWidth"))
- {
- setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt()));
- } else {
- hide(); show();
- }
+ setPen(QPen(m_properties["clrForeground"].asColor(), m_properties["uLineWidth"].toInt()));
+ }
+ else
+ {
+ hide();
+ show();
}
}
+}
- int KviCanvasEllipticItem::rtti() const
+void KviCanvasRectangle::draw(QPainter & p)
+{
+ if(isEnabled())
{
- return KVI_CANVAS_RTTI_ELLIPSE;
+ if(m_properties["bHasBackground"].asBool())
+ {
+ p.fillRect((int)x() + 1, (int)y() + 1, width() - 2, height() - 2, m_properties["clrBackground"].asColor());
+ }
+ p.setPen(pen());
+ p.drawRect((int)x(), (int)y(), width(), height());
}
+ if(isSelected())
+ drawSelection(p);
+}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasEllipse
- //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasRichText
+//
+KviCanvasRichText::KviCanvasRichText(QCanvas * c, int x, int y, int w, int h)
+ : KviCanvasRectangleItem(c, x, y, w, h)
+{
+ QFont f = QFont();
+ f.setStyleHint(QFont::SansSerif);
+ f.setPointSize(12);
+ m_properties.insert("szText", QVariant(QString("Insert here your RICH TEXT")));
+ m_properties.insert("fntDefault", QVariant(f));
+}
+
+KviCanvasRichText::~KviCanvasRichText()
+{
+}
+
+int KviCanvasRichText::rtti() const
+{
+ return KVI_CANVAS_RTTI_RICHTEXT;
+}
+
+void KviCanvasRichText::draw(QPainter & p)
+{
+ if(isEnabled())
+ {
+ QString szText = m_properties["szText"].asString();
+ QSimpleRichText text(szText, m_properties["fntDefault"].asFont());
+ text.setWidth(width());
+ text.draw(&p, (int)x() + 1, (int)y() + 1, QRegion(QRect((int)x() + 1, (int)y() + 1, width(), height())), QColorGroup());
+ }
+
+ if(isSelected())
+ drawSelection(p);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasLine
+//
+KviCanvasLine::KviCanvasLine(QCanvas * c, int x1, int y1, int x2, int y2)
+ : QCanvasLine(c)
+{
+ setPoints(x1, y1, x2, y2);
+ m_properties.insert("uLineWidth", QVariant((unsigned int)0));
+ m_properties.insert("clrForeground", QVariant(QColor()));
+}
+KviCanvasLine::~KviCanvasLine()
+{
+}
- KviCanvasEllipse::KviCanvasEllipse(QCanvas * c,int x,int y,int w,int h)
- : KviCanvasEllipticItem(c,x,y,w,h)
+void KviCanvasLine::setProperty(const QString & property, const QVariant & val)
+{
+ m_properties.replace(property, val);
+ if((property == "uLineWidth") || (property == "clrForeground"))
{
+ setPen(QPen(m_properties["clrForeground"].asColor(), m_properties["uLineWidth"].toInt()));
}
+}
- KviCanvasEllipse::~KviCanvasEllipse()
- {
- }
+int KviCanvasLine::rtti() const
+{
+ return KVI_CANVAS_RTTI_LINE;
+}
- int KviCanvasEllipse::rtti() const
+void KviCanvasLine::draw(QPainter & p)
+{
+ if(isEnabled())
{
- return KVI_CANVAS_RTTI_ELLIPSE;
+ p.setPen(pen());
+ p.drawLine(startPoint(), endPoint());
}
- void KviCanvasEllipse::drawContent(QPainter &p)
+ if(isSelected())
{
- p.drawEllipse((int)x(),(int)y(),width(),height());
+ p.setRasterOp(NotROP);
+ p.setPen(QPen(DotLine));
+ p.drawLine(startPoint(), endPoint());
+ p.setRasterOp(CopyROP);
}
+}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasPie
- //
-
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasView
+//
+KviCanvasView::KviCanvasView(QCanvas * c, DccCanvasWidget * cw, QWidget * par)
+ : QCanvasView(c, par)
+{
+ m_pCanvasWidget = cw;
+ m_state = Idle;
+ m_dragMode = None;
+ m_pSelectedItem = 0;
+ viewport()->setMouseTracking(true);
+}
+
+KviCanvasView::~KviCanvasView()
+{
+}
+
+void KviCanvasView::insertRectangle()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = Rectangle;
+}
+
+void KviCanvasView::insertRichText()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = RichText;
+}
+
+void KviCanvasView::insertLine()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = Line;
+}
+
+void KviCanvasView::insertEllipse()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = Ellipse;
+}
+
+void KviCanvasView::insertPie()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = Pie;
+}
+
+void KviCanvasView::insertChord()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = Chord;
+}
+
+void KviCanvasView::insertPolygonTriangle()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = PolygonTriangle;
+}
+
+void KviCanvasView::insertPolygonRectangle()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = PolygonRectangle;
+}
+
+void KviCanvasView::insertPolygonPentagon()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = PolygonPentagon;
+}
+
+void KviCanvasView::insertPolygonHexagon()
+{
+ m_state = SelectOrigin;
+ setCursor(crossCursor);
+ m_objectToInsert = PolygonPentagon;
+}
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
- KviCanvasPie::KviCanvasPie(QCanvas * c,int x,int y,int w,int h)
- : KviCanvasEllipticItem(c,x,y,w,h)
+static void calcPolygonPoints(QPointArray & pnts, unsigned int nVertices)
+{
+ double dDelta = (2 * M_PI) / nVertices;
+ for(unsigned int i = 0; i < nVertices; i++)
{
- m_properties.insert("iStartAngle",QVariant((int)0));
- m_properties.insert("iExtensionAngle",QVariant((int)360));
+ double dAng = dDelta * i;
+ double theX = 300 * sin(dAng);
+ double theY = 300 * cos(dAng);
+ pnts.setPoint(i, (int)theX, (int)theY);
}
+}
+
+void KviCanvasView::insertObjectAt(const QPoint & pnt, ObjectType o)
+{
+ QCanvasItem * r = 0;
- KviCanvasPie::~KviCanvasPie()
+ switch(o)
{
+ case Rectangle:
+ r = new KviCanvasRectangle(canvas(), pnt.x(), pnt.y(), 0, 0);
+ break;
+ case RichText:
+ r = new KviCanvasRichText(canvas(), pnt.x(), pnt.y(), 0, 0);
+ break;
+ case Line:
+ r = new KviCanvasLine(canvas(), pnt.x(), pnt.y(), pnt.x(), pnt.y());
+ break;
+ case Ellipse:
+ r = new KviCanvasEllipse(canvas(), pnt.x(), pnt.y(), 0, 0);
+ break;
+ case Pie:
+ r = new KviCanvasPie(canvas(), pnt.x(), pnt.y(), 0, 0);
+ break;
+ case Chord:
+ r = new KviCanvasChord(canvas(), pnt.x(), pnt.y(), 0, 0);
+ break;
+ case PolygonTriangle:
+ {
+ QPointArray pa(3);
+ pa.setPoint(0, 0, -500);
+ pa.setPoint(1, -450, 220);
+ pa.setPoint(2, 450, 220);
+ r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1);
+ }
+ break;
+ case PolygonRectangle:
+ {
+ QPointArray pa(4);
+ pa.setPoint(0, -350, -350);
+ pa.setPoint(1, 350, -350);
+ pa.setPoint(2, 350, 350);
+ pa.setPoint(3, -350, 350);
+ r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1);
+ }
+ break;
+ case PolygonPentagon:
+ {
+ QPointArray pa(5);
+ calcPolygonPoints(pa, 5);
+ r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1);
+ }
+ break;
+ case PolygonHexagon:
+ {
+ QPointArray pa(6);
+ calcPolygonPoints(pa, 6);
+ r = new KviCanvasPolygon(canvas(), pnt.x(), pnt.y(), pa, 0.1);
+ }
+ break;
}
- int KviCanvasPie::rtti() const
+ if(r)
{
- return KVI_CANVAS_RTTI_PIE;
+ setItemSelected(r);
+ r->setEnabled(true);
+ r->show();
}
- void KviCanvasPie::drawContent(QPainter &p)
+ switch(KVI_CANVAS_RTTI_CONTROL_TYPE(r))
{
- int iStartAngle = m_properties["iStartAngle"].asInt() * 16;
- int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16;
- p.drawPie((int)x(),(int)y(),width(),height(),iStartAngle,iEndAngle);
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
+ beginDragRectangle((KviCanvasRectangleItem *)r, pnt, true);
+ break;
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
+ beginDragLine((KviCanvasLine *)r, pnt, true);
+ break;
+ // case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
+ // beginDragPolygon((KviCanvasPolygon *)r,pnt,true);
+ // break;
}
+ // canvas()->update();
+}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasChord
- //
- KviCanvasChord::KviCanvasChord(QCanvas * c,int x,int y,int w,int h)
- : KviCanvasEllipticItem(c,x,y,w,h)
- {
- m_properties.insert("iStartAngle",QVariant((int)0));
- m_properties.insert("iExtensionAngle",QVariant((int)360));
- }
+void KviCanvasView::setItemSelected(QCanvasItem * it)
+{
+ clearSelection();
+ it->setSelected(true);
+ m_pSelectedItem = it;
+ m_pCanvasWidget->m_pPropertiesWidget->editItem(it);
+}
- KviCanvasChord::~KviCanvasChord()
- {
- }
+void KviCanvasView::clearSelection()
+{
+ if(!m_pSelectedItem)
+ return;
+ m_pSelectedItem->setSelected(false);
+ m_pSelectedItem = 0;
+ m_pCanvasWidget->m_pPropertiesWidget->editItem(0);
+}
- int KviCanvasChord::rtti() const
- {
- return KVI_CANVAS_RTTI_CHORD;
- }
+void KviCanvasView::beginDragLine(KviCanvasLine * it, const QPoint & p, bool bInitial)
+{
+ QPoint sp = it->startPoint();
- void KviCanvasChord::drawContent(QPainter &p)
- {
- int iStartAngle = m_properties["iStartAngle"].asInt() * 16;
- int iEndAngle = m_properties["iExtensionAngle"].asInt() * 16;
- p.drawChord((int)x(),(int)y(),width(),height(),iStartAngle,iEndAngle);
- }
+ m_dragBegin = p - sp;
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasRectangle
- //
- KviCanvasRectangle::KviCanvasRectangle(QCanvas * c,int x,int y,int w,int h)
- : KviCanvasRectangleItem(c,x,y,w,h)
+ if(bInitial)
{
- m_properties.insert("clrForeground",QVariant(QColor(0,0,0)));
- m_properties.insert("uLineWidth",QVariant((unsigned int)0));
-
- m_properties.insert("clrBackground",QVariant(QColor(0,0,0)));
- m_properties.insert("bHasBackground",QVariant(false,1));
+ m_dragMode = Bottom;
+ setCursor(sizeAllCursor);
+ return;
}
- KviCanvasRectangle::~KviCanvasRectangle()
+ if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3))
{
+ m_dragMode = Top;
+ setCursor(sizeAllCursor);
+ return;
}
- int KviCanvasRectangle::rtti() const
+ sp = it->endPoint();
+ if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3))
{
- return KVI_CANVAS_RTTI_RECTANGLE;
+ m_dragMode = Bottom;
+ setCursor(sizeAllCursor);
+ return;
}
- void KviCanvasRectangle::setProperty(const QString &property,const QVariant &val)
+ m_dragMode = All;
+ setCursor(pointingHandCursor);
+}
+
+void KviCanvasView::dragLine(KviCanvasLine * it, const QPoint & p)
+{
+ switch(m_dragMode)
{
- if(m_properties[property].isValid())
+ case Bottom:
{
- m_properties.replace(property,val);
- if((property == "clrForeground") || (property == "uLineWidth"))
- {
- setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt()));
- } else {
- hide(); show();
- }
+ QPoint sp = it->startPoint();
+ it->setPoints(sp.x(), sp.y(), p.x(), p.y());
}
- }
-
- void KviCanvasRectangle::draw(QPainter & p)
- {
- if(isEnabled())
+ break;
+ case Top:
{
- if(m_properties["bHasBackground"].asBool())
- {
- p.fillRect((int)x() + 1,(int)y() + 1,width() - 2,height() - 2,m_properties["clrBackground"].asColor());
- }
- p.setPen(pen());
- p.drawRect((int)x(),(int)y(),width(),height());
+ QPoint ep = it->endPoint();
+ it->setPoints(p.x(), p.y(), ep.x(), ep.y());
}
-
- if(isSelected())drawSelection(p);
+ break;
+ case All:
+ {
+ QPoint sp = p - m_dragBegin;
+ QPoint ep = sp + (it->endPoint() - it->startPoint());
+ it->setPoints(sp.x(), sp.y(), ep.x(), ep.y());
+ }
+ break;
+ default: /* make gcc happy */
+ break;
}
+ canvas()->update();
+}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static double ssm_2d_rotationAngleFromXAxis(double dx, double dy)
+{
//
- // KviCanvasRichText
+ // v1 . v2 dx * 1 + dy * 0 dx
+ //acos(---------) = acos(-----------------) = acos(---------)
+ // |v1||v2| |(dx,dy)| * 1 |(dx,dy)|
//
- KviCanvasRichText::KviCanvasRichText(QCanvas * c,int x,int y,int w,int h)
- : KviCanvasRectangleItem(c,x,y,w,h)
- {
- QFont f = QFont();
- f.setStyleHint(QFont::SansSerif);
- f.setPointSize(12);
- m_properties.insert("szText",QVariant(QString("Insert here your RICH TEXT")));
- m_properties.insert("fntDefault",QVariant(f));
- }
- KviCanvasRichText::~KviCanvasRichText()
- {
- }
+ //double dVal = hypot(dx,dy);
+ double dVal = sqrt((dx * dx) + (dy * dy));
- int KviCanvasRichText::rtti() const
- {
- return KVI_CANVAS_RTTI_RICHTEXT;
- }
+ if(dVal == 0.0)
+ return 0; // ???
- void KviCanvasRichText::draw(QPainter & p)
- {
- if(isEnabled())
- {
- QString szText = m_properties["szText"].asString();
- QSimpleRichText text(szText,m_properties["fntDefault"].asFont());
- text.setWidth(width());
- text.draw(&p,(int)x() + 1,(int)y() + 1,QRegion(QRect((int)x() + 1,(int)y() + 1,width(),height())),QColorGroup());
- }
+ dVal = acos(dx / dVal);
- if(isSelected())drawSelection(p);
- }
+ return (dy > 0.0) ? dVal : -dVal;
+}
+static double ssm_2d_rotationAngle(double drefx, double drefy, double drotatedx, double drotatedy)
+{
+ double dRefAngle = ssm_2d_rotationAngleFromXAxis(drefx, drefy);
+ double dRotAngle = ssm_2d_rotationAngleFromXAxis(drotatedx, drotatedy);
+ return dRotAngle - dRefAngle;
+}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasLine
+static void ssm_2d_rotate(double & dx, double & dy, double dAngle)
+{
+ // Rotation matrix:
//
- KviCanvasLine::KviCanvasLine(QCanvas * c,int x1,int y1,int x2,int y2)
- : QCanvasLine(c)
- {
- setPoints(x1,y1,x2,y2);
- m_properties.insert("uLineWidth",QVariant((unsigned int)0));
- m_properties.insert("clrForeground",QVariant(QColor()));
- }
+ // | cos(x) sin(x) |
+ // | |
+ // | -sin(x) cos(x) |
- KviCanvasLine::~KviCanvasLine()
- {
- }
+ double s = sin(dAngle);
+ double c = cos(dAngle);
- void KviCanvasLine::setProperty(const QString &property,const QVariant &val)
- {
- m_properties.replace(property,val);
- if((property == "uLineWidth") || (property == "clrForeground"))
- {
- setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt()));
- }
- }
+ double tmpX = (dx * c) - (dy * s);
+ double tmpY = (dx * s) + (dy * c);
- int KviCanvasLine::rtti() const
- {
- return KVI_CANVAS_RTTI_LINE;
- }
+ dx = tmpX;
+ dy = tmpY;
+}
- void KviCanvasLine::draw(QPainter &p)
- {
- if(isEnabled())
- {
- p.setPen(pen());
- p.drawLine(startPoint(),endPoint());
- }
+static double ssm_hypot(double a, double b)
+{
+ return sqrt((a * a) + (b * b));
+}
- if(isSelected())
- {
- p.setRasterOp(NotROP);
- p.setPen(QPen(DotLine));
- p.drawLine(startPoint(),endPoint());
- p.setRasterOp(CopyROP);
- }
- }
+void KviCanvasView::beginDragPolygon(KviCanvasPolygon * it, const QPoint & p, bool bShift, bool bCtrl)
+{
+ m_dragBegin = QPoint((int)(p.x() - it->x()), (int)(p.y() - it->y()));
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasView
- //
- KviCanvasView::KviCanvasView(QCanvas * c,DccCanvasWidget * cw,QWidget * par)
- : QCanvasView(c,par)
- {
- m_pCanvasWidget = cw;
- m_state = Idle;
- m_dragMode = None;
- m_pSelectedItem = 0;
- viewport()->setMouseTracking(true);
- }
+ QPointArray pa = it->areaPoints();
- KviCanvasView::~KviCanvasView()
+ for(unsigned int i = 0; i < pa.size(); i++)
{
+ QPoint pnt = pa.point(i);
+ double dX = pnt.x() - p.x();
+ double dY = pnt.y() - p.y();
+ double dHypot = sqrt((dX * dX) + (dY * dY));
+ if(dHypot < 3.0)
+ {
+ // We're dragging a point
+ m_dragMode = SinglePoint;
+ m_dragPointIndex = i;
+ setCursor(crossCursor);
+ return;
+ }
}
- void KviCanvasView::insertRectangle()
+ if(bShift)
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = Rectangle;
+ m_dragMode = Scale;
+ m_dragScaleFactor = it->scaleFactor();
+ setCursor(sizeAllCursor);
+ return;
}
- void KviCanvasView::insertRichText()
+ if(bCtrl)
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = RichText;
+ m_dragMode = Rotate;
+ m_dragPointArray = it->internalPoints();
+ // qDebug("Here");
+ setCursor(sizeHorCursor);
+ return;
}
- void KviCanvasView::insertLine()
- {
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = Line;
- }
+ m_dragMode = All;
+ setCursor(pointingHandCursor);
+}
- void KviCanvasView::insertEllipse()
+void KviCanvasView::dragPolygon(KviCanvasPolygon * it, const QPoint & p)
+{
+ switch(m_dragMode)
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = Ellipse;
+ case All:
+ it->move(p.x() - m_dragBegin.x(), p.y() - m_dragBegin.y());
+ break;
+ case SinglePoint:
+ {
+ QPointArray pnt = it->internalPoints();
+ pnt.setPoint(m_dragPointIndex, (int)((p.x() - it->x()) / it->scaleFactor()), (int)((p.y() - it->y()) / it->scaleFactor()));
+ it->setInternalPoints(pnt);
+ }
+ break;
+ case Scale:
+ {
+ double dDistance = ssm_hypot(p.x() - it->x(), p.y() - it->y());
+ double dOriginal = ssm_hypot(m_dragBegin.x(), m_dragBegin.y());
+ if(dOriginal < 1)
+ dOriginal = 1;
+ if(dDistance < 0.1)
+ dDistance = 0.1;
+ it->setScaleFactor(m_dragScaleFactor * dDistance / dOriginal);
+ }
+ break;
+ case Rotate:
+ {
+ QPoint act((int)(p.x() - it->x()), (int)(p.y() - it->y()));
+ double dAngle = ssm_2d_rotationAngle(m_dragBegin.x(), m_dragBegin.y(), act.x(), act.y());
+ // qDebug("%d,%d %d,%d %f",m_dragBegin.x(),m_dragBegin.y(),act.x(),act.y(),dAngle);
+ QPointArray thePoints = m_dragPointArray.copy();
+ for(unsigned int i = 0; i < thePoints.size(); i++)
+ {
+ QPoint tmp = thePoints.point(i);
+ double dx = tmp.x();
+ double dy = tmp.y();
+ ssm_2d_rotate(dx, dy, dAngle);
+ thePoints.setPoint(i, (int)dx, (int)dy);
+ }
+ it->setInternalPoints(thePoints);
+ }
+ break;
+ default:
+ break;
}
+ canvas()->update();
+}
- void KviCanvasView::insertPie()
- {
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = Pie;
- }
+void KviCanvasView::beginDragRectangle(KviCanvasRectangleItem * it, const QPoint & p, bool bInitial)
+{
+ m_dragBegin = QPoint((int)(p.x() - it->x()), (int)(p.y() - it->y()));
- void KviCanvasView::insertChord()
+ if(bInitial)
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = Chord;
+ // Right bottom
+ m_dragMode = RightBottom;
+ setCursor(sizeFDiagCursor);
+ return;
}
- void KviCanvasView::insertPolygonTriangle()
+ if(p.x() < (((int)it->x()) + 2))
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = PolygonTriangle;
+ // Left edge
+ if(p.y() < (((int)it->y()) + 2))
+ {
+ // Left top
+ m_dragMode = LeftTop;
+ setCursor(sizeFDiagCursor);
+ return;
+ }
+ if(p.y() > (it->bottom() - 2))
+ {
+ // Left bottom
+ m_dragMode = LeftBottom;
+ setCursor(sizeBDiagCursor);
+ return;
+ }
+ m_dragMode = Left;
+ setCursor(sizeHorCursor);
+ return;
}
- void KviCanvasView::insertPolygonRectangle()
+ if(p.x() > (it->right() - 2))
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = PolygonRectangle;
+ // Right edge
+ if(p.y() < (((int)it->y()) + 2))
+ {
+ // Right top
+ m_dragMode = RightTop;
+ setCursor(sizeBDiagCursor);
+ return;
+ }
+ if(p.y() > (it->bottom() - 2))
+ {
+ // Right bottom
+ m_dragMode = RightBottom;
+ setCursor(sizeFDiagCursor);
+ return;
+ }
+ m_dragMode = Right;
+ setCursor(sizeHorCursor);
+ return;
}
- void KviCanvasView::insertPolygonPentagon()
+ // Somewhere in the middle
+ if(p.y() < (((int)it->y()) + 2))
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = PolygonPentagon;
+ // Top
+ m_dragMode = Top;
+ setCursor(sizeVerCursor);
+ return;
}
-
- void KviCanvasView::insertPolygonHexagon()
+ if(p.y() > (it->bottom() - 2))
{
- m_state = SelectOrigin;
- setCursor(crossCursor);
- m_objectToInsert = PolygonPentagon;
+ // Bottom
+ m_dragMode = Bottom;
+ setCursor(sizeVerCursor);
+ return;
}
- #ifndef M_PI
- #define M_PI 3.14159265358979323846
- #endif
+ m_dragMode = All;
+ setCursor(pointingHandCursor);
+}
- static void calcPolygonPoints(QPointArray &pnts,unsigned int nVertices)
- {
- double dDelta = (2 * M_PI) / nVertices;
- for(unsigned int i=0;imove(p.x() - m_dragBegin.x(), p.y() - m_dragBegin.y());
break;
- case Line:
- r = new KviCanvasLine(canvas(),pnt.x(),pnt.y(),pnt.x(),pnt.y());
+ case Left:
+ aux1 = it->width() + (int)(it->x() - p.x());
+ aux2 = p.x();
+ if(aux1 < 1)
+ {
+ aux2 += (aux1 - 1);
+ aux1 = 1;
+ }
+ it->move(aux2, it->y());
+ it->setSize(aux1, it->height());
break;
- case Ellipse:
- r = new KviCanvasEllipse(canvas(),pnt.x(),pnt.y(),0,0);
+ case Right:
+ aux1 = it->width() + (p.x() - it->right());
+ if(aux1 < 1)
+ aux1 = 1;
+ it->setSize(aux1, it->height());
break;
- case Pie:
- r = new KviCanvasPie(canvas(),pnt.x(),pnt.y(),0,0);
+ case Top:
+ aux1 = it->height() + (int)(it->y() - p.y());
+ aux2 = p.y();
+ if(aux1 < 1)
+ {
+ aux2 += (aux1 - 1);
+ aux1 = 1;
+ }
+ it->move(it->x(), aux2);
+ it->setSize(it->width(), aux1);
break;
- case Chord:
- r = new KviCanvasChord(canvas(),pnt.x(),pnt.y(),0,0);
+ case Bottom:
+ aux1 = (int)it->height() + (p.y() - it->bottom());
+ if(aux1 < 1)
+ aux1 = 1;
+ it->setSize(it->width(), aux1);
break;
- case PolygonTriangle:
+ case LeftTop:
+ aux1 = it->width() + (int)(it->x() - p.x());
+ aux3 = p.x();
+ if(aux1 < 1)
{
- QPointArray pa(3);
- pa.setPoint(0,0,-500);
- pa.setPoint(1,-450,220);
- pa.setPoint(2,450,220);
- r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1);
+ aux3 += (aux1 - 1);
+ aux1 = 1;
}
- break;
- case PolygonRectangle:
+ aux2 = it->height() + (int)(it->y() - p.y());
+ aux4 = p.y();
+ if(aux2 < 1)
{
- QPointArray pa(4);
- pa.setPoint(0,-350,-350);
- pa.setPoint(1,350,-350);
- pa.setPoint(2,350,350);
- pa.setPoint(3,-350,350);
- r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1);
+ aux4 += (aux2 - 1);
+ aux2 = 1;
}
+ it->setSize(aux1, aux2);
+ it->move(aux3, aux4);
break;
- case PolygonPentagon:
+ case RightTop:
+ aux1 = it->width() + (int)(p.x() - it->right());
+ if(aux1 < 1)
+ aux1 = 1;
+ aux2 = it->height() + (int)(it->y() - p.y());
+ aux4 = p.y();
+ if(aux2 < 1)
{
- QPointArray pa(5);
- calcPolygonPoints(pa,5);
- r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1);
+ aux4 += (aux2 - 1);
+ aux2 = 1;
}
+ it->setSize(aux1, aux2);
+ it->move(it->x(), aux4);
break;
- case PolygonHexagon:
+ case LeftBottom:
+ aux1 = it->width() + (int)(it->x() - p.x());
+ aux3 = p.x();
+ if(aux1 < 1)
{
- QPointArray pa(6);
- calcPolygonPoints(pa,6);
- r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1);
+ aux3 += (aux1 - 1);
+ aux1 = 1;
}
+ aux2 = it->height() + (int)(p.y() - it->bottom());
+ if(aux2 < 1)
+ aux2 = 1;
+ it->setSize(aux1, aux2);
+ it->move(aux3, it->y());
break;
- }
-
- if(r)
- {
- setItemSelected(r);
- r->setEnabled(true);
- r->show();
- }
-
- switch(KVI_CANVAS_RTTI_CONTROL_TYPE(r))
- {
- case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
- beginDragRectangle((KviCanvasRectangleItem *)r,pnt,true);
+ case RightBottom:
+ aux1 = it->width() + (int)(p.x() - it->right());
+ if(aux1 < 1)
+ aux1 = 1;
+ aux2 = it->height() + (int)(p.y() - it->bottom());
+ if(aux2 < 1)
+ aux2 = 1;
+ it->setSize(aux1, aux2);
break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
- beginDragLine((KviCanvasLine *)r,pnt,true);
+ default:
break;
- // case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
- // beginDragPolygon((KviCanvasPolygon *)r,pnt,true);
- // break;
- }
-
- // canvas()->update();
}
- void KviCanvasView::setItemSelected(QCanvasItem * it)
- {
- clearSelection();
- it->setSelected(true);
- m_pSelectedItem = it;
- m_pCanvasWidget->m_pPropertiesWidget->editItem(it);
-
- }
+ canvas()->update();
+}
- void KviCanvasView::clearSelection()
+void KviCanvasView::contentsMouseMoveEvent(QMouseEvent * e)
+{
+ // QPoint p = inverseWorldMatrix().map(e->pos());
+ QPoint p = e->pos();
+ if(e->state() & Qt::LeftButton)
{
- if(!m_pSelectedItem)return;
- m_pSelectedItem->setSelected(false);
- m_pSelectedItem = 0;
- m_pCanvasWidget->m_pPropertiesWidget->editItem(0);
+ if((m_dragMode != None) && (m_pSelectedItem))
+ {
+ if(m_pSelectedItem->isEnabled())
+ m_pSelectedItem->setEnabled(false);
+ switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem))
+ {
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
+ dragRectangle((KviCanvasRectangleItem *)m_pSelectedItem, p);
+ break;
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
+ dragLine((KviCanvasLine *)m_pSelectedItem, p);
+ break;
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
+ dragPolygon((KviCanvasPolygon *)m_pSelectedItem, p);
+ break;
+ }
+ }
}
-
- void KviCanvasView::beginDragLine(KviCanvasLine * it,const QPoint &p,bool bInitial)
+ else
{
- QPoint sp = it->startPoint();
-
- m_dragBegin = p - sp;
-
- if(bInitial)
+ // Without buttons
+ if(m_state == Idle)
{
- m_dragMode = Bottom;
- setCursor(sizeAllCursor);
- return;
- }
+ QCanvasItemList l = canvas()->collisions(p);
+ QCanvasItemList::Iterator it = l.begin();
- if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3))
- {
- m_dragMode = Top;
- setCursor(sizeAllCursor);
- return;
- }
-
- sp = it->endPoint();
- if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3))
- {
- m_dragMode = Bottom;
- setCursor(sizeAllCursor);
- return;
- }
-
- m_dragMode = All;
- setCursor(pointingHandCursor);
- }
-
- void KviCanvasView::dragLine(KviCanvasLine * it,const QPoint &p)
- {
- switch(m_dragMode)
- {
- case Bottom:
- {
- QPoint sp = it->startPoint();
- it->setPoints(sp.x(),sp.y(),p.x(),p.y());
- }
- break;
- case Top:
- {
- QPoint ep = it->endPoint();
- it->setPoints(p.x(),p.y(),ep.x(),ep.y());
- }
- break;
- case All:
+ if(it != l.end())
{
- QPoint sp = p - m_dragBegin;
- QPoint ep = sp + (it->endPoint() - it->startPoint());
- it->setPoints(sp.x(),sp.y(),ep.x(),ep.y());
- }
- break;
- default: /* make gcc happy */
- break;
- }
- canvas()->update();
- }
-
- static double ssm_2d_rotationAngleFromXAxis(double dx,double dy)
- {
- //
- // v1 . v2 dx * 1 + dy * 0 dx
- //acos(---------) = acos(-----------------) = acos(---------)
- // |v1||v2| |(dx,dy)| * 1 |(dx,dy)|
- //
-
- //double dVal = hypot(dx,dy);
- double dVal = sqrt((dx * dx) + (dy * dy));
-
- if(dVal == 0.0)return 0; // ???
-
- dVal = acos(dx / dVal);
-
- return (dy > 0.0) ? dVal : -dVal;
- }
-
- static double ssm_2d_rotationAngle(double drefx,double drefy,double drotatedx,double drotatedy)
- {
- double dRefAngle = ssm_2d_rotationAngleFromXAxis(drefx,drefy);
- double dRotAngle = ssm_2d_rotationAngleFromXAxis(drotatedx,drotatedy);
- return dRotAngle - dRefAngle;
- }
-
- static void ssm_2d_rotate(double &dx,double &dy,double dAngle)
- {
- // Rotation matrix:
- //
- // | cos(x) sin(x) |
- // | |
- // | -sin(x) cos(x) |
-
- double s = sin(dAngle);
- double c = cos(dAngle);
-
- double tmpX = (dx * c) - (dy * s);
- double tmpY = (dx * s) + (dy * c);
-
- dx = tmpX;
- dy = tmpY;
- }
-
- static double ssm_hypot(double a,double b)
- {
- return sqrt((a * a) + (b * b));
- }
-
- void KviCanvasView::beginDragPolygon(KviCanvasPolygon * it,const QPoint &p,bool bShift,bool bCtrl)
- {
- m_dragBegin = QPoint((int)(p.x() - it->x()),(int)(p.y() - it->y()));
-
- QPointArray pa = it->areaPoints();
-
- for(unsigned int i=0;iscaleFactor();
- setCursor(sizeAllCursor);
- return;
- }
-
- if(bCtrl)
- {
- m_dragMode = Rotate;
- m_dragPointArray = it->internalPoints();
- // qDebug("Here");
- setCursor(sizeHorCursor);
- return;
- }
-
- m_dragMode = All;
- setCursor(pointingHandCursor);
- }
-
- void KviCanvasView::dragPolygon(KviCanvasPolygon * it,const QPoint &p)
- {
- switch(m_dragMode)
- {
- case All:
- it->move(p.x() - m_dragBegin.x(),p.y() - m_dragBegin.y());
- break;
- case SinglePoint:
- {
- QPointArray pnt = it->internalPoints();
- pnt.setPoint(m_dragPointIndex,(int)((p.x() - it->x()) / it->scaleFactor()),(int)((p.y() - it->y()) / it->scaleFactor()));
- it->setInternalPoints(pnt);
- }
- break;
- case Scale:
- {
- double dDistance = ssm_hypot(p.x() - it->x(),p.y() - it->y());
- double dOriginal = ssm_hypot(m_dragBegin.x(),m_dragBegin.y());
- if(dOriginal < 1)dOriginal = 1;
- if(dDistance < 0.1)dDistance = 0.1;
- it->setScaleFactor(m_dragScaleFactor * dDistance / dOriginal);
- }
- break;
- case Rotate:
- {
- QPoint act((int)(p.x() - it->x()),(int)(p.y() - it->y()));
- double dAngle = ssm_2d_rotationAngle(m_dragBegin.x(),m_dragBegin.y(),act.x(),act.y());
- // qDebug("%d,%d %d,%d %f",m_dragBegin.x(),m_dragBegin.y(),act.x(),act.y(),dAngle);
- QPointArray thePoints = m_dragPointArray.copy();
- for(unsigned int i=0;isetInternalPoints(thePoints);
- }
- break;
- default:
- break;
- }
- canvas()->update();
- }
-
- void KviCanvasView::beginDragRectangle(KviCanvasRectangleItem * it,const QPoint & p,bool bInitial)
- {
- m_dragBegin = QPoint((int)(p.x() - it->x()),(int)(p.y() - it->y()));
-
- if(bInitial)
- {
- // Right bottom
- m_dragMode = RightBottom;
- setCursor(sizeFDiagCursor);
- return;
- }
-
- if(p.x() < (((int)it->x()) + 2))
- {
- // Left edge
- if(p.y() < (((int)it->y()) + 2))
- {
- // Left top
- m_dragMode = LeftTop;
- setCursor(sizeFDiagCursor);
- return;
- }
- if(p.y() > ( it->bottom() - 2))
- {
- // Left bottom
- m_dragMode = LeftBottom;
- setCursor(sizeBDiagCursor);
- return;
- }
- m_dragMode = Left;
- setCursor(sizeHorCursor);
- return;
- }
-
- if(p.x() > (it->right() - 2))
- {
- // Right edge
- if(p.y() < (((int)it->y()) + 2))
- {
- // Right top
- m_dragMode = RightTop;
- setCursor(sizeBDiagCursor);
- return;
+ else if(m_dragMode != None)
+ setCursor(arrowCursor);
}
- if(p.y() > ( it->bottom() - 2))
+ else
{
- // Right bottom
- m_dragMode = RightBottom;
- setCursor(sizeFDiagCursor);
- return;
+ if(m_dragMode != None)
+ setCursor(arrowCursor);
}
- m_dragMode = Right;
- setCursor(sizeHorCursor);
- return;
- }
-
- // Somewhere in the middle
- if(p.y() < (((int)it->y()) + 2))
- {
- // Top
- m_dragMode = Top;
- setCursor(sizeVerCursor);
- return;
}
- if(p.y() > ( it->bottom() - 2))
- {
- // Bottom
- m_dragMode = Bottom;
- setCursor(sizeVerCursor);
- return;
- }
-
- m_dragMode = All;
- setCursor(pointingHandCursor);
}
+}
- void KviCanvasView::dragRectangle(KviCanvasRectangleItem * it,const QPoint & p)
+void KviCanvasView::contentsMouseReleaseEvent(QMouseEvent * e)
+{
+ if(m_dragMode != None)
{
-
- int aux1,aux2,aux3,aux4;
-
- switch(m_dragMode)
+ // Was just dragging a rectangle
+ m_dragMode = None;
+ setCursor(arrowCursor);
+ if(m_pSelectedItem)
{
- case All:
- it->move(p.x() - m_dragBegin.x(),p.y() - m_dragBegin.y());
- break;
- case Left:
- aux1 = it->width() + (int)(it->x() - p.x());
- aux2 = p.x();
- if(aux1 < 1)
- {
- aux2 += (aux1 - 1);
- aux1 = 1;
- }
- it->move(aux2,it->y());
- it->setSize(aux1,it->height());
- break;
- case Right:
- aux1 = it->width() + (p.x() - it->right());
- if(aux1 < 1)aux1 = 1;
- it->setSize(aux1,it->height());
- break;
- case Top:
- aux1 = it->height() + (int)(it->y() - p.y());
- aux2 = p.y();
- if(aux1 < 1)
- {
- aux2 += (aux1 - 1);
- aux1 = 1;
- }
- it->move(it->x(),aux2);
- it->setSize(it->width(),aux1);
- break;
- case Bottom:
- aux1 = (int)it->height() + (p.y() - it->bottom());
- if(aux1 < 1)aux1 = 1;
- it->setSize(it->width(),aux1);
- break;
- case LeftTop:
- aux1 = it->width() + (int)(it->x() - p.x());
- aux3 = p.x();
- if(aux1 < 1)
- {
- aux3 += (aux1 - 1);
- aux1 = 1;
- }
- aux2 = it->height() + (int)(it->y() - p.y());
- aux4 = p.y();
- if(aux2 < 1)
- {
- aux4 += (aux2 - 1);
- aux2 = 1;
- }
- it->setSize(aux1,aux2);
- it->move(aux3,aux4);
- break;
- case RightTop:
- aux1 = it->width() + (int)(p.x() - it->right());
- if(aux1 < 1)aux1 = 1;
- aux2 = it->height() + (int)(it->y() - p.y());
- aux4 = p.y();
- if(aux2 < 1)
- {
- aux4 += (aux2 - 1);
- aux2 = 1;
- }
- it->setSize(aux1,aux2);
- it->move(it->x(),aux4);
- break;
- case LeftBottom:
- aux1 = it->width() + (int)(it->x() - p.x());
- aux3 = p.x();
- if(aux1 < 1)
- {
- aux3 += (aux1 - 1);
- aux1 = 1;
- }
- aux2 = it->height() + (int)(p.y() - it->bottom());
- if(aux2 < 1)aux2 = 1;
- it->setSize(aux1,aux2);
- it->move(aux3,it->y());
- break;
- case RightBottom:
- aux1 = it->width() + (int)(p.x() - it->right());
- if(aux1 < 1)aux1 = 1;
- aux2 = it->height() + (int)(p.y() - it->bottom());
- if(aux2 < 1)aux2 = 1;
- it->setSize(aux1,aux2);
- break;
- default:
- break;
+ m_pSelectedItem->setEnabled(true);
+ canvas()->update();
}
-
- canvas()->update();
}
+}
- void KviCanvasView::contentsMouseMoveEvent(QMouseEvent *e)
+void KviCanvasView::contentsMousePressEvent(QMouseEvent * e)
+{
+ if(e->button() & Qt::LeftButton)
{
- // QPoint p = inverseWorldMatrix().map(e->pos());
+ // QPoint p = inverseWorldMatrix().map(e->pos());
QPoint p = e->pos();
- if(e->state() & Qt::LeftButton)
+
+ switch(m_state)
{
- if((m_dragMode != None) && (m_pSelectedItem))
- {
- if(m_pSelectedItem->isEnabled())m_pSelectedItem->setEnabled(false);
- switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem))
- {
- case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
- dragRectangle((KviCanvasRectangleItem *)m_pSelectedItem,p);
- break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
- dragLine((KviCanvasLine *)m_pSelectedItem,p);
- break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
- dragPolygon((KviCanvasPolygon *)m_pSelectedItem,p);
- break;
- }
- }
- } else {
- // Without buttons
- if(m_state == Idle)
+ case SelectOrigin:
+ clearSelection();
+ setCursor(arrowCursor);
+ m_state = Idle;
+ insertObjectAt(p, m_objectToInsert);
+ canvas()->update();
+ break;
+
+ case Idle:
{
QCanvasItemList l = canvas()->collisions(p);
QCanvasItemList::Iterator it = l.begin();
@@ -1061,450 +1150,390 @@
if(it != l.end())
{
// Got an item
- QCanvasItem * hit = (QCanvasItem *)*it;
+ QCanvasItem * hit = *it;
+ if(hit != m_pSelectedItem)
+ {
+ // Was not selected yet
+ setItemSelected(hit);
+ canvas()->update();
+ }
// Now find the point on that we have clicked it
- if(hit == m_pSelectedItem)
+ switch(KVI_CANVAS_RTTI_CONTROL_TYPE(hit))
{
- switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem))
- {
- case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
- beginDragRectangle((KviCanvasRectangleItem *)m_pSelectedItem,p);
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
+ beginDragRectangle(((KviCanvasRectangleItem *)hit), p);
break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
- beginDragLine((KviCanvasLine *)m_pSelectedItem,p);
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
+ beginDragLine(((KviCanvasLine *)hit), p);
break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
- beginDragPolygon((KviCanvasPolygon *)m_pSelectedItem,p);
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
+ beginDragPolygon(((KviCanvasPolygon *)hit), p, e->state() & Qt::ShiftButton, e->state() & Qt::ControlButton);
break;
- }
}
- else if(m_dragMode != None)setCursor(arrowCursor);
- } else {
- if(m_dragMode != None)setCursor(arrowCursor);
}
- }
- }
- }
-
- void KviCanvasView::contentsMouseReleaseEvent(QMouseEvent *e)
- {
- if(m_dragMode != None)
- {
- // Was just dragging a rectangle
- m_dragMode = None;
- setCursor(arrowCursor);
- if(m_pSelectedItem)
- {
- m_pSelectedItem->setEnabled(true);
- canvas()->update();
- }
- }
- }
-
- void KviCanvasView::contentsMousePressEvent(QMouseEvent *e)
- {
- if(e->button() & Qt::LeftButton)
- {
- // QPoint p = inverseWorldMatrix().map(e->pos());
- QPoint p = e->pos();
-
- switch(m_state)
- {
- case SelectOrigin:
+ else
+ {
+ // No item
clearSelection();
- setCursor(arrowCursor);
- m_state = Idle;
- insertObjectAt(p,m_objectToInsert);
canvas()->update();
- break;
-
- case Idle:
- {
- QCanvasItemList l = canvas()->collisions(p);
- QCanvasItemList::Iterator it = l.begin();
-
- if(it != l.end())
- {
- // Got an item
- QCanvasItem * hit = *it;
- if(hit != m_pSelectedItem)
- {
- // Was not selected yet
- setItemSelected(hit);
- canvas()->update();
- }
- // Now find the point on that we have clicked it
- switch(KVI_CANVAS_RTTI_CONTROL_TYPE(hit))
- {
- case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
- beginDragRectangle(((KviCanvasRectangleItem *)hit),p);
- break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
- beginDragLine(((KviCanvasLine *)hit),p);
- break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
- beginDragPolygon(((KviCanvasPolygon *)hit),p,e->state() & Qt::ShiftButton,e->state() & Qt::ControlButton);
- break;
- }
- } else {
- // No item
- clearSelection();
- canvas()->update();
- }
}
- break;
}
+ break;
}
}
+}
- void KviCanvasView::propertyChanged(const QString &s,const QVariant &v)
- {
- if(!m_pSelectedItem)return;
+void KviCanvasView::propertyChanged(const QString & s, const QVariant & v)
+{
+ if(!m_pSelectedItem)
+ return;
- switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem))
- {
- case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
- ((KviCanvasRectangleItem *)m_pSelectedItem)->setProperty(s,v);
+ switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem))
+ {
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
+ ((KviCanvasRectangleItem *)m_pSelectedItem)->setProperty(s, v);
break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
- ((KviCanvasLine *)m_pSelectedItem)->setProperty(s,v);
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
+ ((KviCanvasLine *)m_pSelectedItem)->setProperty(s, v);
break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
- ((KviCanvasPolygon *)m_pSelectedItem)->setProperty(s,v);
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
+ ((KviCanvasPolygon *)m_pSelectedItem)->setProperty(s, v);
break;
- }
-
- canvas()->update();
}
+ canvas()->update();
+}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviVariantTableItem
- //
- KviVariantTableItem::KviVariantTableItem(QTable * t,const QVariant & property)
- : QTableItem(t,QTableItem::WhenCurrent,QString())
- {
- m_property = property;
- }
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviVariantTableItem
+//
+KviVariantTableItem::KviVariantTableItem(QTable * t, const QVariant & property)
+ : QTableItem(t, QTableItem::WhenCurrent, QString())
+{
+ m_property = property;
+}
- KviVariantTableItem::~KviVariantTableItem()
- {
- }
+KviVariantTableItem::~KviVariantTableItem()
+{
+}
- QWidget * KviVariantTableItem::createEditor() const
+QWidget * KviVariantTableItem::createEditor() const
+{
+ switch(m_property.type())
{
- switch(m_property.type())
+ case QVariant::String:
{
- case QVariant::String:
- {
- QLineEdit * e = new QLineEdit(table()->viewport());
- e->setText(m_property.toString());
- return e;
- }
- break;
- case QVariant::Int:
- {
- QLineEdit * e = new QLineEdit(table()->viewport());
- QString sz;
- sz.setNum(m_property.toInt());
- e->setText(sz);
- e->setValidator(new QIntValidator(e));
- return e;
- }
- break;
- case QVariant::UInt:
- {
- QLineEdit * e = new QLineEdit(table()->viewport());
- QString sz;
- sz.setNum(m_property.toInt());
- e->setText(sz);
- QIntValidator * i = new QIntValidator(e);
- i->setBottom(0);
- e->setValidator(i);
- return e;
- }
- break;
- case QVariant::Bool:
- {
- QComboBox * b = new QComboBox(false,table()->viewport());
- b->addAction("false");
- b->addAction("true");
- b->setCurrentItem(m_property.toBool() ? 1 : 0);
- return b;
- }
- break;
- case QVariant::Color:
- {
- QLineEdit * e = new QLineEdit(table()->viewport());
- e->setText(m_property.toColor().name());
- return e;
- }
- break;
- case QVariant::Font:
- {
- QComboBox * b = new QComboBox(true,table()->viewport());
- QString tmp;
- QString tmpDefault;
- QFont f = QFont();
- f.setStyleHint(QFont::SansSerif);
- tmpDefault = f.family();
- f.setStyleHint(QFont::TypeWriter);
- tmp.setNum(m_property.toFont().pointSize());
- tmp.prepend(", ");
- tmp.prepend(m_property.toFont().family());
- b->addAction(tmp);
- b->addAction(tmpDefault + ", 8");
- b->addAction(tmpDefault + ", 10");
- b->addAction(tmpDefault + ", 12");
- b->addAction(tmpDefault + ", 14");
- b->addAction(tmpDefault + ", 16");
- b->addAction(tmpDefault + ", 18");
- b->addAction(tmpDefault + ", 20");
- b->addAction(tmpDefault + ", 24");
- b->addAction(tmpDefault + ", 28");
- b->addAction(tmpDefault + ", 32");
- b->addAction(tmpDefault + ", 40");
- b->addAction(tmpDefault + ", 48");
- b->addAction(f.family() + ", 12");
- b->setCurrentItem(0);
- b->setCurrentItem(m_property.toBool() ? 1 : 0);
- return b;
- }
- break;
- default:
- break;
+ QLineEdit * e = new QLineEdit(table()->viewport());
+ e->setText(m_property.toString());
+ return e;
+ }
+ break;
+ case QVariant::Int:
+ {
+ QLineEdit * e = new QLineEdit(table()->viewport());
+ QString sz;
+ sz.setNum(m_property.toInt());
+ e->setText(sz);
+ e->setValidator(new QIntValidator(e));
+ return e;
+ }
+ break;
+ case QVariant::UInt:
+ {
+ QLineEdit * e = new QLineEdit(table()->viewport());
+ QString sz;
+ sz.setNum(m_property.toInt());
+ e->setText(sz);
+ QIntValidator * i = new QIntValidator(e);
+ i->setBottom(0);
+ e->setValidator(i);
+ return e;
+ }
+ break;
+ case QVariant::Bool:
+ {
+ QComboBox * b = new QComboBox(false, table()->viewport());
+ b->addAction("false");
+ b->addAction("true");
+ b->setCurrentItem(m_property.toBool() ? 1 : 0);
+ return b;
}
- return 0;
+ break;
+ case QVariant::Color:
+ {
+ QLineEdit * e = new QLineEdit(table()->viewport());
+ e->setText(m_property.toColor().name());
+ return e;
+ }
+ break;
+ case QVariant::Font:
+ {
+ QComboBox * b = new QComboBox(true, table()->viewport());
+ QString tmp;
+ QString tmpDefault;
+ QFont f = QFont();
+ f.setStyleHint(QFont::SansSerif);
+ tmpDefault = f.family();
+ f.setStyleHint(QFont::TypeWriter);
+ tmp.setNum(m_property.toFont().pointSize());
+ tmp.prepend(", ");
+ tmp.prepend(m_property.toFont().family());
+ b->addAction(tmp);
+ b->addAction(tmpDefault + ", 8");
+ b->addAction(tmpDefault + ", 10");
+ b->addAction(tmpDefault + ", 12");
+ b->addAction(tmpDefault + ", 14");
+ b->addAction(tmpDefault + ", 16");
+ b->addAction(tmpDefault + ", 18");
+ b->addAction(tmpDefault + ", 20");
+ b->addAction(tmpDefault + ", 24");
+ b->addAction(tmpDefault + ", 28");
+ b->addAction(tmpDefault + ", 32");
+ b->addAction(tmpDefault + ", 40");
+ b->addAction(tmpDefault + ", 48");
+ b->addAction(f.family() + ", 12");
+ b->setCurrentItem(0);
+ b->setCurrentItem(m_property.toBool() ? 1 : 0);
+ return b;
+ }
+ break;
+ default:
+ break;
}
+ return 0;
+}
- void KviVariantTableItem::setContentFromEditor(QWidget * w)
+void KviVariantTableItem::setContentFromEditor(QWidget * w)
+{
+ switch(m_property.type())
{
- switch(m_property.type())
- {
- case QVariant::String:
- m_property = QVariant(((QLineEdit *)w)->text());
+ case QVariant::String:
+ m_property = QVariant(((QLineEdit *)w)->text());
break;
- case QVariant::Int:
- m_property = QVariant(((QLineEdit *)w)->text().toInt());
+ case QVariant::Int:
+ m_property = QVariant(((QLineEdit *)w)->text().toInt());
break;
- case QVariant::UInt:
- m_property = QVariant(((QLineEdit *)w)->text().toUInt());
+ case QVariant::UInt:
+ m_property = QVariant(((QLineEdit *)w)->text().toUInt());
break;
- case QVariant::Bool:
- m_property = QVariant(((QComboBox *)w)->currentItem(),1);
+ case QVariant::Bool:
+ m_property = QVariant(((QComboBox *)w)->currentItem(), 1);
break;
- case QVariant::Color:
- m_property.asColor().setNamedColor(((QLineEdit *)w)->text());
+ case QVariant::Color:
+ m_property.asColor().setNamedColor(((QLineEdit *)w)->text());
break;
- case QVariant::Font:
+ case QVariant::Font:
+ {
+ KviCString txt = ((QComboBox *)w)->currentText();
+ if(txt.hasData())
{
- KviCString txt = ((QComboBox *)w)->currentText();
- if(txt.hasData())
- {
- KviCString fam = txt;
- fam.cutFromFirst(',',true);
- fam.trimmed();
- KviCString psz = txt;
- psz.cutToFirst(',',true);
- psz.trimmed();
- bool bOk;
- unsigned int uSize = psz.toUInt(&bOk);
- if(!bOk)uSize = 12;
- m_property = QVariant(QFont(fam.ptr(),uSize));
- }
+ KviCString fam = txt;
+ fam.cutFromFirst(',', true);
+ fam.trimmed();
+ KviCString psz = txt;
+ psz.cutToFirst(',', true);
+ psz.trimmed();
+ bool bOk;
+ unsigned int uSize = psz.toUInt(&bOk);
+ if(!bOk)
+ uSize = 12;
+ m_property = QVariant(QFont(fam.ptr(), uSize));
}
- break;
- default:
- break;
}
+ break;
+ default:
+ break;
}
+}
- void KviVariantTableItem::paint(QPainter *p,const QColorGroup &cg,const QRect &cr,bool)
- {
- p->fillRect(0,0,cr.width(),cr.height(),cg.base());
+void KviVariantTableItem::paint(QPainter * p, const QColorGroup & cg, const QRect & cr, bool)
+{
+ p->fillRect(0, 0, cr.width(), cr.height(), cg.base());
- if(m_property.type() == QVariant::Color)
+ if(m_property.type() == QVariant::Color)
+ {
+ p->fillRect(3, 3, cr.width() - 6, cr.height() - 6, m_property.asColor());
+ }
+ else
+ {
+ QString sz;
+ switch(m_property.type())
{
- p->fillRect(3,3,cr.width() - 6,cr.height() - 6,m_property.asColor());
- } else {
- QString sz;
- switch(m_property.type())
- {
- case QVariant::String:
- sz = m_property.toString();
+ case QVariant::String:
+ sz = m_property.toString();
break;
- case QVariant::Bool:
- sz = m_property.toBool() ? "true" : "false";
+ case QVariant::Bool:
+ sz = m_property.toBool() ? "true" : "false";
break;
- case QVariant::Font:
- sz.setNum(m_property.toFont().pointSize());
- sz.prepend(", ");
- sz.prepend(m_property.toFont().family());
+ case QVariant::Font:
+ sz.setNum(m_property.toFont().pointSize());
+ sz.prepend(", ");
+ sz.prepend(m_property.toFont().family());
break;
- case QVariant::Int:
- sz.setNum(m_property.toInt());
+ case QVariant::Int:
+ sz.setNum(m_property.toInt());
break;
- case QVariant::UInt:
- sz.setNum(m_property.toUInt());
+ case QVariant::UInt:
+ sz.setNum(m_property.toUInt());
break;
- default:
+ default:
break;
- }
- p->setPen(cg.text());
- p->drawText(0,0,cr.width(),cr.height(),Qt::AlignLeft | Qt::AlignTop,sz);
}
+ p->setPen(cg.text());
+ p->drawText(0, 0, cr.width(), cr.height(), Qt::AlignLeft | Qt::AlignTop, sz);
}
+}
-
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // KviCanvasItemPropertiesWidget
- //
- KviCanvasItemPropertiesWidget::KviCanvasItemPropertiesWidget(QWidget * par)
- : QTable(par)
- {
- setSelectionMode(QTable::NoSelection);
- setColumnMovingEnabled(false);
- setRowMovingEnabled(false);
- setShowGrid(true);
- setNumCols(2);
- setSorting(false);
- setLeftMargin(0);
- verticalHeader()->hide();
- connect(this,SIGNAL(valueChanged(int,int)),this,SLOT(cellEdited(int,int)));
- }
-
- KviCanvasItemPropertiesWidget::~KviCanvasItemPropertiesWidget()
- {
- }
-
- void KviCanvasItemPropertiesWidget::cellEdited(int row,int)
- {
- QTableItem * it = item(row,0);
- if(!it)return;
- QString szName = it->text();
- it = item(row,1);
- if(!it)return;
- emit propertyChanged(szName,((KviVariantTableItem *)it)->property());
- }
-
- void KviCanvasItemPropertiesWidget::editItem(QCanvasItem * it)
- {
- if(!it)
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// KviCanvasItemPropertiesWidget
+//
+KviCanvasItemPropertiesWidget::KviCanvasItemPropertiesWidget(QWidget * par)
+ : QTable(par)
+{
+ setSelectionMode(QTable::NoSelection);
+ setColumnMovingEnabled(false);
+ setRowMovingEnabled(false);
+ setShowGrid(true);
+ setNumCols(2);
+ setSorting(false);
+ setLeftMargin(0);
+ verticalHeader()->hide();
+ connect(this, SIGNAL(valueChanged(int, int)), this, SLOT(cellEdited(int, int)));
+}
+
+KviCanvasItemPropertiesWidget::~KviCanvasItemPropertiesWidget()
+{
+}
+
+void KviCanvasItemPropertiesWidget::cellEdited(int row, int)
+{
+ QTableItem * it = item(row, 0);
+ if(!it)
+ return;
+ QString szName = it->text();
+ it = item(row, 1);
+ if(!it)
+ return;
+ emit propertyChanged(szName, ((KviVariantTableItem *)it)->property());
+}
+
+void KviCanvasItemPropertiesWidget::editItem(QCanvasItem * it)
+{
+ if(!it)
+ {
+ for(int i = 0; i < numRows(); i++)
{
- for(int i=0;i * m = 0;
+ QMap * m = 0;
- switch(KVI_CANVAS_RTTI_CONTROL_TYPE(it))
- {
- case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
- m = ((KviCanvasRectangleItem *)it)->properties();
+ switch(KVI_CANVAS_RTTI_CONTROL_TYPE(it))
+ {
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE:
+ m = ((KviCanvasRectangleItem *)it)->properties();
break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
- m = ((KviCanvasLine *)it)->properties();
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE:
+ m = ((KviCanvasLine *)it)->properties();
break;
- case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
- m = ((KviCanvasPolygon *)it)->properties();
+ case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON:
+ m = ((KviCanvasPolygon *)it)->properties();
break;
- }
-
- if(!m)
- {
- editItem(0);
- return;
- }
-
- for(int i=0;icount());
-
- QTableItem * item;
-
- int idx = 0;
-
- for(QMap::ConstIterator iter = m->begin();iter != m->end();++iter)
- {
- item = new QTableItem(this,QTableItem::Never,iter.key().toUtf8().data());
- setItem(idx,0,item);
- item = new KviVariantTableItem(this,iter.data());
- setItem(idx,1,item);
- idx++;
- }
-
}
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
- // DccCanvasWidget
- //
- DccCanvasWidget::DccCanvasWidget(QWidget * par)
- : QWidget(par,"canvas_widget")
+ if(!m)
{
- m_pCanvas = new QCanvas(this);
- //#warning "Make this size as parameter of Dcc ?"
- m_pCanvas->resize(648,480);
- m_pMenuBar = new QMenuBar(this);
- m_pSplitter = new QSplitter(QSplitter::Horizontal,this);
- m_pCanvasView = new KviCanvasView(m_pCanvas,this,m_pSplitter);
- m_pStatusLabel = new QLabel(this);
- m_pPropertiesWidget = new KviCanvasItemPropertiesWidget(m_pSplitter);
- QValueList l;
- l.append(80);
- l.append(20);
- m_pSplitter->setSizes(l);
-
- connect(m_pPropertiesWidget,SIGNAL(propertyChanged(const QString &,const QVariant &)),m_pCanvasView,SLOT(propertyChanged(const QString &,const QVariant &)));
-
- QMenu * add = new QMenu(m_pMenuBar);
- QMenu * shapes = new QMenu(add);
- QMenu * polygons = new QMenu(add);
- QMenu * items = new QMenu(add);
- shapes->addAction(__tr2qs_ctx("&Line","dcc"),m_pCanvasView,SLOT(insertLine()));
- shapes->addAction(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertRectangle()));
- shapes->addAction(__tr2qs_ctx("&Ellipse","dcc"),m_pCanvasView,SLOT(insertEllipse()));
- shapes->addAction(__tr2qs_ctx("&Pie","dcc"),m_pCanvasView,SLOT(insertPie()));
- shapes->addAction(__tr2qs_ctx("&Chord","dcc"),m_pCanvasView,SLOT(insertChord()));
-
- items->addAction(__tr2qs_ctx("&Rich text (html)","dcc"),m_pCanvasView,SLOT(insertRichText()));
-
- polygons->addAction(__tr2qs_ctx("&Triangle","dcc"),m_pCanvasView,SLOT(insertPolygonTriangle()));
- polygons->addAction(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertPolygonRectangle()));
- polygons->addAction(__tr2qs_ctx("&Pentagon","dcc"),m_pCanvasView,SLOT(insertPolygonPentagon()));
- polygons->addAction(__tr2qs_ctx("&Hexagon","dcc"),m_pCanvasView,SLOT(insertPolygonHexagon()));
-
- add->addAction(__tr2qs_ctx("&Shape","dcc"),shapes);
- add->addAction(__tr2qs_ctx("&Item","dcc"),items);
- add->addAction(__tr2qs_ctx("&Polygons","dcc"),polygons);
-
- m_pMenuBar->addAction(__tr2qs_ctx("&Insert","dcc"),add);
+ editItem(0);
+ return;
}
- DccCanvasWidget::~DccCanvasWidget()
+ for(int i = 0; i < numRows(); i++)
{
+ clearCell(i, 0);
+ clearCell(i, 1);
+ clearCellWidget(i, 1);
}
- void DccCanvasWidget::resizeEvent(QResizeEvent *)
+ setNumRows(m->count());
+
+ QTableItem * item;
+
+ int idx = 0;
+
+ for(QMap::ConstIterator iter = m->begin(); iter != m->end(); ++iter)
{
- int h = m_pMenuBar->sizeHint().height();
- m_pMenuBar->setGeometry(0,0,width(),h);
- int h2 = m_pStatusLabel->sizeHint().height();
- m_pStatusLabel->setGeometry(0,height() - h2,width(),h2);
- m_pSplitter->setGeometry(0,h,width(),height() - (h + h2));
+ item = new QTableItem(this, QTableItem::Never, iter.key().toUtf8().data());
+ setItem(idx, 0, item);
+ item = new KviVariantTableItem(this, iter.data());
+ setItem(idx, 1, item);
+ idx++;
}
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// DccCanvasWidget
+//
+DccCanvasWidget::DccCanvasWidget(QWidget * par)
+ : QWidget(par, "canvas_widget")
+{
+ m_pCanvas = new QCanvas(this);
+ //#warning "Make this size as parameter of Dcc ?"
+ m_pCanvas->resize(648, 480);
+ m_pMenuBar = new QMenuBar(this);
+ m_pSplitter = new QSplitter(QSplitter::Horizontal, this);
+ m_pCanvasView = new KviCanvasView(m_pCanvas, this, m_pSplitter);
+ m_pStatusLabel = new QLabel(this);
+ m_pPropertiesWidget = new KviCanvasItemPropertiesWidget(m_pSplitter);
+ QValueList l;
+ l.append(80);
+ l.append(20);
+ m_pSplitter->setSizes(l);
+
+ connect(m_pPropertiesWidget, SIGNAL(propertyChanged(const QString &, const QVariant &)), m_pCanvasView, SLOT(propertyChanged(const QString &, const QVariant &)));
+
+ QMenu * add = new QMenu(m_pMenuBar);
+ QMenu * shapes = new QMenu(add);
+ QMenu * polygons = new QMenu(add);
+ QMenu * items = new QMenu(add);
+ shapes->addAction(__tr2qs_ctx("&Line", "dcc"), m_pCanvasView, SLOT(insertLine()));
+ shapes->addAction(__tr2qs_ctx("&Rectangle", "dcc"), m_pCanvasView, SLOT(insertRectangle()));
+ shapes->addAction(__tr2qs_ctx("&Ellipse", "dcc"), m_pCanvasView, SLOT(insertEllipse()));
+ shapes->addAction(__tr2qs_ctx("&Pie", "dcc"), m_pCanvasView, SLOT(insertPie()));
+ shapes->addAction(__tr2qs_ctx("&Chord", "dcc"), m_pCanvasView, SLOT(insertChord()));
+
+ items->addAction(__tr2qs_ctx("&Rich text (html)", "dcc"), m_pCanvasView, SLOT(insertRichText()));
+
+ polygons->addAction(__tr2qs_ctx("&Triangle", "dcc"), m_pCanvasView, SLOT(insertPolygonTriangle()));
+ polygons->addAction(__tr2qs_ctx("&Rectangle", "dcc"), m_pCanvasView, SLOT(insertPolygonRectangle()));
+ polygons->addAction(__tr2qs_ctx("&Pentagon", "dcc"), m_pCanvasView, SLOT(insertPolygonPentagon()));
+ polygons->addAction(__tr2qs_ctx("&Hexagon", "dcc"), m_pCanvasView, SLOT(insertPolygonHexagon()));
+
+ add->addAction(__tr2qs_ctx("&Shape", "dcc"), shapes);
+ add->addAction(__tr2qs_ctx("&Item", "dcc"), items);
+ add->addAction(__tr2qs_ctx("&Polygons", "dcc"), polygons);
+
+ m_pMenuBar->addAction(__tr2qs_ctx("&Insert", "dcc"), add);
+}
+
+DccCanvasWidget::~DccCanvasWidget()
+{
+}
+
+void DccCanvasWidget::resizeEvent(QResizeEvent *)
+{
+ int h = m_pMenuBar->sizeHint().height();
+ m_pMenuBar->setGeometry(0, 0, width(), h);
+ int h2 = m_pStatusLabel->sizeHint().height();
+ m_pStatusLabel->setGeometry(0, height() - h2, width(), h2);
+ m_pSplitter->setGeometry(0, h, width(), height() - (h + h2));
+}
#endif
diff --git a/src/modules/dcc/canvaswidget.h b/src/modules/dcc/canvaswidget.h
index da40016e7..d6737cef4 100644
--- a/src/modules/dcc/canvaswidget.h
+++ b/src/modules/dcc/canvaswidget.h
@@ -27,276 +27,309 @@
#include "DccBroker.h"
#ifdef COMPILE_DCC_CANVAS
- #include
- #include
- #include
- #include
- #include
- #include
- #include
-
- class DccCanvasWidget;
-
- #define KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE 1
- #define KVI_CANVAS_RTTI_CONTROL_TYPE_LINE 2
- #define KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON 4
-
- #define KVI_CANVAS_RTTI_CONTROL_TYPE_MASK 255
-
- #define KVI_CANVAS_RTTI_RECTANGLE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (1 << 8))
- #define KVI_CANVAS_RTTI_RICHTEXT (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (2 << 8))
- #define KVI_CANVAS_RTTI_LINE (KVI_CANVAS_RTTI_CONTROL_TYPE_LINE | (3 << 8))
- #define KVI_CANVAS_RTTI_ELLIPSE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (4 << 8))
- #define KVI_CANVAS_RTTI_CHORD (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (5 << 8))
- #define KVI_CANVAS_RTTI_PIE (KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE | (6 << 8))
- #define KVI_CANVAS_RTTI_POLYGON (KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON | (7 << 8))
-
- #define KVI_CANVAS_RTTI_CONTROL_TYPE(__item) (__item->rtti() & KVI_CANVAS_RTTI_CONTROL_TYPE_MASK)
-
-
-
- class KviCanvasPolygon : public QCanvasPolygon
- {
- public:
- KviCanvasPolygon(QCanvas * c,int x,int y,QPointArray &pnts,double dScaleFactor);
- virtual ~KviCanvasPolygon();
- protected:
- QMap m_properties;
- double m_dScaleFactor;
- QPointArray m_points;
- public:
- virtual void draw(QPainter & p);
- double scaleFactor(){ return m_dScaleFactor; };
- void setScaleFactor(double dScaleFactor);
- void resetPoints();
- const QPointArray & internalPoints(){ return m_points; };
- void setInternalPoints(const QPointArray &pnts);
- QMap * properties(){ return &m_properties; };
- virtual void setProperty(const QString &property,const QVariant &val);
- virtual int rtti() const;
- };
-
-
- class KviCanvasRectangleItem : public QCanvasRectangle
- {
- friend class KviCanvasRectangle;
- friend class KviCanvasRichText;
- friend class KviCanvasEllipticItem;
- protected:
- KviCanvasRectangleItem(QCanvas * c,int x,int y,int w,int h);
- public:
- virtual ~KviCanvasRectangleItem();
- protected:
- QMap m_properties;
- public:
- int right(){ return ((int)x()) + width(); };
- int bottom(){ return ((int)y()) + height(); };
- QMap * properties(){ return &m_properties; };
- virtual void setProperty(const QString &property,const QVariant &val);
+#include
+#include
+#include
+#include
+#include
+#include |