diff options
| author | 2008-04-03 23:29:02 +0000 | |
|---|---|---|
| committer | 2008-04-03 23:29:02 +0000 | |
| commit | 529524db3f530e4edaf741a40a91d1a5787027ac (patch) | |
| tree | 681d9b67ad62dea930a09e46aefa7e6a0cd418fd /src | |
| parent | get rid of $KVI_INSTALL_PREFIX and $KVI_VERSION_BRANCH ; more cmake fixes for... (diff) | |
| download | KVIrc-529524db3f530e4edaf741a40a91d1a5787027ac.tar.gz KVIrc-529524db3f530e4edaf741a40a91d1a5787027ac.tar.bz2 KVIrc-529524db3f530e4edaf741a40a91d1a5787027ac.zip | |
added a skel for windows on Tom's patch
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1386 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
29 files changed, 2199 insertions, 2400 deletions
diff --git a/src/modules/dcc/adpcmcodec.cpp b/src/modules/dcc/adpcmcodec.cpp index 65f12a00d..9b32188fc 100644 --- a/src/modules/dcc/adpcmcodec.cpp +++ b/src/modules/dcc/adpcmcodec.cpp @@ -53,48 +53,47 @@ // Intel ADPCM step variation table */ static int indexTable[16] = { - -1, -1, -1, -1, 2, 4, 6, 8, - -1, -1, -1, -1, 2, 4, 6, 8, + -1, -1, -1, -1, 2, 4, 6, 8, + -1, -1, -1, -1, 2, 4, 6, 8, }; static int stepsizeTable[89] = { - 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, - 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, - 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, - 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, - 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, - 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, - 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, - 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, - 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 + 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, + 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, + 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, + 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, + 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, + 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, + 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, + 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, + 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 }; - void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state) { - 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 */ - int diff; /* Difference between val and valprev */ - int step; /* Stepsize */ - int valpred; /* Predicted output value */ - 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 */ - - lpOut = (signed char *)outdata; - lpIn = indata; + 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 */ + int diff; /* Difference between val and valprev */ + int step; /* Stepsize */ + int valpred; /* Predicted output value */ + 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 */ + + lpOut = (signed char *)outdata; + lpIn = indata; + + valpred = state->valprev; + index = state->index; + step = stepsizeTable[index]; - valpred = state->valprev; - index = state->index; - step = stepsizeTable[index]; - - bufferstep = 1; + bufferstep = 1; - for ( ;len > 0;len-- ) { + for ( ;len > 0;len-- ) { val = *lpIn++; // Step 1 - compute difference with previous value diff = val - valpred; @@ -112,20 +111,20 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state) delta = 0; vpdiff = (step >> 3); if (diff >=step){ - delta = 4; - diff -= step; - vpdiff += step; + delta = 4; + diff -= step; + vpdiff += step; } step >>= 1; if (diff >= step) { - delta |= 2; - diff -= step; - vpdiff += step; + delta |= 2; + diff -= step; + vpdiff += step; } step >>= 1; if ( diff >= step ) { - delta |= 1; - vpdiff += step; + delta |= 1; + vpdiff += step; } // Step 3 - Update previous value if(sign)valpred -= vpdiff; @@ -143,37 +142,36 @@ void ADPCM_compress(short indata[],char outdata[],int len,ADPCM_state *state) if ( bufferstep )outputbuffer = (delta << 4) & 0xf0; else *lpOut++ = (delta & 0x0f) | outputbuffer; bufferstep = !bufferstep; - } - // Output last step, if needed - if (!bufferstep)*lpOut++ = outputbuffer; - state->valprev = valpred; - state->index = index; + } + // Output last step, if needed + if (!bufferstep)*lpOut++ = outputbuffer; + state->valprev = valpred; + state->index = index; } 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 */ - - outp = outdata; - inp = (signed char *)indata; + 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; + + valpred = state->valprev; + index = state->index; + step = stepsizeTable[index]; - valpred = state->valprev; - index = state->index; - step = stepsizeTable[index]; + bufferstep = 0; - bufferstep = 0; - - for ( ; len > 0 ; len-- ) { - + for ( ; len > 0 ; len-- ) { /* Step 1 - get the delta value */ if ( bufferstep )delta = inputbuffer & 0xf; else { @@ -213,10 +211,10 @@ void ADPCM_uncompress(char indata[],short outdata[],int len,ADPCM_state *state) /* Step 7 - Output value */ *outp++ = valpred; - } - - state->valprev = valpred; - state->index = index; + } + + state->valprev = valpred; + state->index = index; } diff --git a/src/modules/dcc/adpcmcodec.h b/src/modules/dcc/adpcmcodec.h index 63343df07..142ff4b6d 100644 --- a/src/modules/dcc/adpcmcodec.h +++ b/src/modules/dcc/adpcmcodec.h @@ -30,13 +30,14 @@ // 16384 32768 | 8192 | ~110 250 290 // -#include <qstring.h> // fix for qtextstream.h +#include <QString> // fix for qtextstream.h + #include "codec.h" typedef struct adpcm_state { - short valprev; /* Previous output value */ - char index; /* Index into stepsize table */ + short valprev; /* Previous output value */ + char index; /* Index into stepsize table */ } ADPCM_state; diff --git a/src/modules/dcc/broker.cpp b/src/modules/dcc/broker.cpp index 4c081713d..1827011fa 100644 --- a/src/modules/dcc/broker.cpp +++ b/src/modules/dcc/broker.cpp @@ -24,10 +24,11 @@ #include "dialogs.h" #include "chat.h" #include "send.h" +#include "voice.h" + #ifdef COMPILE_DCC_CANVAS -#include "canvas.h" + #include "canvas.h" #endif -#include "voice.h" #include "kvi_app.h" #include "kvi_frame.h" @@ -40,13 +41,13 @@ #include "kvi_ircconnection.h" #include "kvi_sharedfiles.h" +#include <QFileInfo> +#include <QString> + // kvi_app.cpp extern KVIRC_API KviMediaManager * g_pMediaManager; extern KVIRC_API KviSharedFilesManager * g_pSharedFilesManager; -#include <qfileinfo.h> -#include <qstring.h> - //#warning "The broker might lookup the remote host name" KviDccBroker::KviDccBroker() @@ -124,18 +125,17 @@ void KviDccBroker::unregisterDccBox(KviDccBox * box) m_pBoxList->removeRef(box); } - void KviDccBroker::cancelDcc(KviDccDescriptor * dcc) { delete dcc; - dcc = 0; + dcc = 0; } void KviDccBroker::cancelDcc(KviDccBox *box,KviDccDescriptor * dcc) { if(box)box->forgetDescriptor(); delete dcc; - dcc = 0; + dcc = 0; } /////////////////////////////////////////////////////////////////////////////// @@ -168,15 +168,15 @@ void KviDccBroker::rsendAskForFileName(KviDccDescriptor * dcc) d->szLocalFileName = *(it); d->szLocalFileName.stripWhiteSpace(); ++it; - if(d->szLocalFileName.isEmpty()) + if(d->szLocalFileName.isEmpty()) cancelDcc(d); - else + else rsendExecute(d); } delete dcc; } } else { - cancelDcc(dcc); + cancelDcc(dcc); } } @@ -260,7 +260,6 @@ void KviDccBroker::rsendExecute(KviDccBox * box,KviDccDescriptor * dcc) void KviDccBroker::handleChatRequest(KviDccDescriptor * dcc) { - if(!dcc->bAutoAccept) { // FIXME: better message ? Secure Direct Client Connection...eventually @@ -388,7 +387,7 @@ void KviDccBroker::passiveVoiceExecute(KviDccDescriptor * dcc) { KviStr tmp(KviStr::Format,"dcc: voice %s@%s:%s",dcc->szNick.utf8().data(),dcc->szIp.utf8().data(),dcc->szPort.utf8().data()); KviDccVoice * v = new KviDccVoice(dcc->console()->frame(),dcc,tmp.ptr()); -//#warning "Create minimized dcc voice ?... or maybe it's too much ? :)" + //#warning "Create minimized dcc voice ?... or maybe it's too much ? :)" bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat); dcc->console()->frame()->addWindow(v,!bMinimized); if(bMinimized)v->minimize(); @@ -401,7 +400,6 @@ void KviDccBroker::passiveVoiceExecute(KviDccDescriptor * dcc) /////////////////////////////////////////////////////////////////////////////// #ifdef COMPILE_DCC_CANVAS - void KviDccBroker::activeCanvasManage(KviDccDescriptor * dcc) { if(!dcc->bAutoAccept) @@ -426,7 +424,6 @@ void KviDccBroker::activeCanvasManage(KviDccDescriptor * dcc) activeCanvasExecute(0,dcc); } } - #endif void KviDccBroker::activeCanvasExecute(KviDccBox *box,KviDccDescriptor * dcc) @@ -443,7 +440,7 @@ void KviDccBroker::activeCanvasExecute(KviDccBox *box,KviDccDescriptor * dcc) KviStr tmp(KviStr::Format,"dcc: canvas %s@%s:%s",dcc->szNick.utf8().data(),dcc->szIp.utf8().data(),dcc->szPort.utf8().data()); KviDccCanvas * cnv = new KviDccCanvas(dcc->console()->frame(),dcc,tmp.ptr()); -//#warning "This option should be dedicated to Dcc Canvas!....for now we are using the DccChat options" + //#warning "This option should be dedicated to Dcc Canvas!....for now we are using the DccChat options" bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : \ (KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat) || \ (dcc->bAutoAccept && KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChatWhenAutoAccepted))); @@ -463,13 +460,12 @@ void KviDccBroker::passiveCanvasExecute(KviDccDescriptor * dcc) { KviStr tmp(KviStr::Format,"dcc: canvas %s@%s:%s",dcc->szNick.utf8().data(),dcc->szIp.utf8().data(),dcc->szPort.utf8().data()); KviDccCanvas * cnv = new KviDccCanvas(dcc->console()->frame(),dcc,tmp.ptr()); -//#warning "This option should be dedicated to Dcc Canvas!....for now we are using the DccChat options" + //#warning "This option should be dedicated to Dcc Canvas!....for now we are using the DccChat options" bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : KVI_OPTION_BOOL(KviOption_boolCreateMinimizedDccChat); dcc->console()->frame()->addWindow(cnv,!bMinimized); if(bMinimized)cnv->minimize(); m_pDccWindowList->append(cnv); } - #endif /////////////////////////////////////////////////////////////////////////////// @@ -538,7 +534,7 @@ void KviDccBroker::recvFileManage(KviDccDescriptor * dcc) ); } -//#warning "Maybe remove the pending avatar if rejected ?" + //#warning "Maybe remove the pending avatar if rejected ?" QString title = __tr2qs_ctx("DCC %1 Request - KVIrc","dcc").arg(dcc->szType); @@ -551,7 +547,6 @@ void KviDccBroker::recvFileManage(KviDccDescriptor * dcc) box->show(); } else { // auto accept - if(_OUTPUT_VERBOSE) { dcc->console()->output(KVI_OUT_DCCMSG,__tr2qs_ctx("Auto-accepting DCC %Q request from %Q!%Q@%Q for file %Q","dcc"), @@ -793,15 +788,15 @@ void KviDccBroker::sendFileManage(KviDccDescriptor * dcc) d->szLocalFileName = *(it); d->szLocalFileName.stripWhiteSpace(); ++it; - if(d->szLocalFileName.isEmpty()) + if(d->szLocalFileName.isEmpty()) cancelDcc(d); - else + else sendFileExecute(0,d); } delete dcc; } } else { - cancelDcc(dcc); + cancelDcc(dcc); } } @@ -894,7 +889,6 @@ bool KviDccBroker::handleResumeRequest(KviDccRequest * dcc,const char * filename return KviDccFileTransfer::handleResumeRequest(filename,port,filePos); } - #ifndef COMPILE_USE_STANDALONE_MOC_SOURCES #include "m_broker.moc" #endif //!COMPILE_USE_STANDALONE_MOC_SOURCES diff --git a/src/modules/dcc/broker.h b/src/modules/dcc/broker.h index dd61cbd6f..77ef8b7c9 100644 --- a/src/modules/dcc/broker.h +++ b/src/modules/dcc/broker.h @@ -6,7 +6,7 @@ // Creation date : Tue Sep 19 09 2000 10:20:01 by Szymon Stefanek // // This file is part of the KVirc irc client distribution -// Copyright (C) 1999-2006 Szymon Stefanek (pragma at kvirc dot net) +// Copyright (C) 1999-2008 Szymon Stefanek (pragma at kvirc dot net) // // This program is FREE software. You can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,28 +24,24 @@ // //======================================================================================= -#include "kvi_settings.h" - -#ifdef COMPILE_USE_QT4 - // #define COMPILE_DCC_CANVAS -#else - #define COMPILE_DCC_CANVAS -#endif +#include "descriptor.h" +#include "kvi_settings.h" #include "kvi_string.h" #include "kvi_pointerlist.h" #include "kvi_sparser.h" - #include "kvi_pointerhashtable.h" -#include <qdatetime.h> -#include <qobject.h> + +#include <QDateTime> +#include <QObject> class KviConsole; class KviDccBroker; class KviWindow; class KviDccBox; -#include "descriptor.h" +// #define COMPILE_DCC_CANVAS + class KviDccZeroPortTag { @@ -109,7 +105,6 @@ public slots: void sendFileExecute(KviDccBox * box,KviDccDescriptor * dcc); void recvFileExecute(KviDccBox * box,KviDccDescriptor * dcc); - void chooseSaveFileName(KviDccBox *box,KviDccDescriptor * dcc); void renameOverwriteResume(KviDccBox *box,KviDccDescriptor * dcc); void renameDccSendFile(KviDccBox *box,KviDccDescriptor * dcc); diff --git a/src/modules/dcc/canvas.cpp b/src/modules/dcc/canvas.cpp index dfe39e975..b89b25a87 100644 --- a/src/modules/dcc/canvas.cpp +++ b/src/modules/dcc/canvas.cpp @@ -26,276 +26,273 @@ #ifdef COMPILE_DCC_CANVAS -#include "dialogs.h" -#include "marshal.h" -#include "canvaswidget.h" - -#define _KVI_DEBUG_CHECK_RANGE_ -#include "kvi_debug.h" -#include "kvi_options.h" -#include "kvi_input.h" -#include "kvi_ircview.h" -#include "kvi_iconmanager.h" -#include "kvi_locale.h" -#include "kvi_error.h" -#include "kvi_out.h" -#include "kvi_netutils.h" -#include "kvi_console.h" -#include "kvi_frame.h" -#include "kvi_malloc.h" -#include "kvi_memmove.h" -#include "kvi_thread.h" -#include "kvi_ircsocket.h" -#include "kvi_settings.h" -#include "kvi_themedlabel.h" -#include "kvi_ircconnection.h" - -#include <qsplitter.h> - -extern KviDccBroker * g_pDccBroker; - - -KviDccCanvas::KviDccCanvas(KviFrame *pFrm,KviDccDescriptor * dcc,const char * name) -: KviDccWindow(KVI_WINDOW_TYPE_DCCCANVAS,pFrm,name,dcc) -{ - m_pSplitter = new QSplitter(QSplitter::Vertical,this,"splitter"); - - m_pCanvas = new KviCanvasWidget(m_pSplitter); - - m_pIrcView = new KviIrcView(m_pSplitter,pFrm,this); - m_pInput = new KviInput(this); - -// setFocusHandler(m_pInput,this); - - m_pMarshal = new KviDccMarshal(this); - connect(m_pMarshal,SIGNAL(error(int)),this,SLOT(handleMarshalError(int))); - connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected())); - - - if(!(m_pDescriptor->bActive)) + #include "dialogs.h" + #include "marshal.h" + #include "canvaswidget.h" + + #define _KVI_DEBUG_CHECK_RANGE_ + #include "kvi_debug.h" + #include "kvi_options.h" + #include "kvi_input.h" + #include "kvi_ircview.h" + #include "kvi_iconmanager.h" + #include "kvi_locale.h" + #include "kvi_error.h" + #include "kvi_out.h" + #include "kvi_netutils.h" + #include "kvi_console.h" + #include "kvi_frame.h" + #include "kvi_malloc.h" + #include "kvi_memmove.h" + #include "kvi_thread.h" + #include "kvi_ircsocket.h" + #include "kvi_settings.h" + #include "kvi_themedlabel.h" + #include "kvi_ircconnection.h" + + #include <QSplitter> + + extern KviDccBroker * g_pDccBroker; + + + KviDccCanvas::KviDccCanvas(KviFrame *pFrm,KviDccDescriptor * dcc,const char * name) + : KviDccWindow(KVI_WINDOW_TYPE_DCCCANVAS,pFrm,name,dcc) { - // PASSIVE CONNECTION - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC CANVAS connection","dcc")); - int ret = m_pMarshal->dccListen(dcc->szListenIp,dcc->szListenPort,m_pDescriptor->bDoTimeout); - if(ret != KviError_success)handleMarshalError(ret); - else { - - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"), - &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); - - if(dcc->bSendRequest) - { - QString ip = !dcc->szFakeIp.isEmpty() ? dcc->szFakeIp : dcc->szListenIp; - QString port = !dcc->szFakePort.isEmpty() ? dcc->szFakePort.utf8().data() : m_pMarshal->localPort(); -//#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned number)" - struct in_addr a; - if(kvi_stringIpToBinaryIp(ip.utf8().data(),&a))ip.setNum(htonl(a.s_addr)); - dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC CANVAS chat %Q %Q%c", - dcc->console()->connection()->encodeText( dcc->szNick.utf8().data() ).data(), - 0x01,&ip, - &port, - 0x01); - output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC CANVAS request to %Q, waiting for the remote client to connect...","dcc"), - &(dcc->szNick)); - } else outputNoFmt(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC CANVAS request not sent: awaiting manual connections","dcc")); + m_pSplitter = new QSplitter(QSplitter::Vertical,this,"splitter"); + + m_pCanvas = new KviCanvasWidget(m_pSplitter); + + m_pIrcView = new KviIrcView(m_pSplitter,pFrm,this); + m_pInput = new KviInput(this); + + // setFocusHandler(m_pInput,this); + + m_pMarshal = new KviDccMarshal(this); + connect(m_pMarshal,SIGNAL(error(int)),this,SLOT(handleMarshalError(int))); + connect(m_pMarshal,SIGNAL(connected()),this,SLOT(connected())); + + + if(!(m_pDescriptor->bActive)) + { + // PASSIVE CONNECTION + output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting a passive DCC CANVAS connection","dcc")); + int ret = m_pMarshal->dccListen(dcc->szListenIp,dcc->szListenPort,m_pDescriptor->bDoTimeout); + if(ret != KviError_success)handleMarshalError(ret); + else { + + output(KVI_OUT_DCCMSG,__tr2qs_ctx("Listening on interface %Q port %Q","dcc"), + &(m_pMarshal->localIp()),&(m_pMarshal->localPort())); + + if(dcc->bSendRequest) + { + QString ip = !dcc->szFakeIp.isEmpty() ? dcc->szFakeIp : dcc->szListenIp; + QString port = !dcc->szFakePort.isEmpty() ? dcc->szFakePort.utf8().data() : m_pMarshal->localPort(); + //#warning "OPTION FOR SENDING 127.0.0.1 and so on (not an unsigned number)" + struct in_addr a; + if(kvi_stringIpToBinaryIp(ip.utf8().data(),&a))ip.setNum(htonl(a.s_addr)); + dcc->console()->connection()->sendFmtData("PRIVMSG %s :%cDCC CANVAS chat %Q %Q%c", + dcc->console()->connection()->encodeText( dcc->szNick.utf8().data() ).data(), + 0x01,&ip, + &port, + 0x01); + output(KVI_OUT_DCCMSG,__tr2qs_ctx("Sent DCC CANVAS request to %Q, waiting for the remote client to connect...","dcc"), + &(dcc->szNick)); + } else outputNoFmt(KVI_OUT_DCCMSG,__tr2qs_ctx("DCC CANVAS request not sent: awaiting manual connections","dcc")); + } + } else { + // ACTIVE CONNECTION + outputNoFmt(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC CANVAS connection","dcc")); + int ret = m_pMarshal->dccConnect(dcc->szIp.utf8().data(),dcc->szPort.utf8().data(),m_pDescriptor->bDoTimeout); + if(ret != KviError_success)handleMarshalError(ret); + else output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(dcc->szIp),&(dcc->szPort)); } - } else { - // ACTIVE CONNECTION - outputNoFmt(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC CANVAS connection","dcc")); - int ret = m_pMarshal->dccConnect(dcc->szIp.utf8().data(),dcc->szPort.utf8().data(),m_pDescriptor->bDoTimeout); - if(ret != KviError_success)handleMarshalError(ret); - else output(KVI_OUT_DCCMSG,__tr2qs_ctx("Contacting host %Q on port %Q","dcc"),&(dcc->szIp),&(dcc->szPort)); + + // m_pSlaveThread = 0; } - -// m_pSlaveThread = 0; -} - -KviDccCanvas::~KviDccCanvas() -{ - g_pDccBroker->unregisterDccWindow(this); -// if(m_pSlaveThread) -// { -// m_pSlaveThread->terminate(); -// delete m_pSlaveThread; -// m_pSlaveThread = 0; -// } - KviThreadManager::killPendingEvents(this); -// delete m_pDescriptor; -// delete m_pMarshal; -} - -const QString & KviDccCanvas::target() -{ - // This may change on the fly... - m_szTarget.sprintf("%s@%s:%s", - m_pDescriptor->szNick.utf8().data(),m_pDescriptor->szIp.utf8().data(),m_pDescriptor->szPort.utf8().data()); - return m_szTarget; -} - -void KviDccCanvas::fillCaptionBuffers() -{ - KviStr tmp(KviStr::Format,"DCC Canvas %s@%s:%s", - m_pDescriptor->szNick.utf8().data(),m_pDescriptor->szIp.utf8().data(),m_pDescriptor->szPort.utf8().data()); - - m_szPlainTextCaption = tmp; - - m_szHtmlActiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", - KVI_OPTION_COLOR(KviOption_colorCaptionTextActive).name().ascii(),tmp.ptr()); - m_szHtmlInactiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", - KVI_OPTION_COLOR(KviOption_colorCaptionTextInactive).name().ascii(),tmp.ptr()); -} - -QPixmap * KviDccCanvas::myIconPtr() -{ - return g_pIconManager->getSmallIcon(KVI_SMALLICON_CANVAS); -} - - -void KviDccCanvas::getBaseLogFileName(KviStr &buffer) -{ - buffer.sprintf("%s_%s_%s",m_pDescriptor->szNick.utf8().data(),m_pDescriptor->szIp.utf8().data(),m_pDescriptor->szPort.utf8().data()); -} - -void KviDccCanvas::ownMessage(const char * text) -{ - KviStr buf(KviStr::Format,"%s\r\n",text); -// m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); - m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, - m_pDescriptor->szLocalNick.utf8().data(),m_pDescriptor->szLocalUser.utf8().data(), - m_pDescriptor->szLocalHost.utf8().data(),text); -} - -void KviDccCanvas::ownAction(const char * text) -{ - KviStr buf(KviStr::Format,"%cACTION %s%c\r\n",text); -// m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); - output(KVI_OUT_ACTION,"%Q %s",&(m_pDescriptor->szLocalNick),text); -} - -bool KviDccCanvas::event(QEvent *e) -{ -// if(e->type() == KVI_THREAD_EVENT) -// { -// switch(((KviThreadEvent *)e)->id()) -// { -// case KVI_DCC_THREAD_EVENT_ERROR: -// { -// int * err = ((KviThreadDataEvent<int> *)e)->getData(); -// output(KVI_OUT_DCCERROR,__tr("ERROR: %s"),kvi_getErrorString(*err)); -// delete err; -// return true; -// } -// break; -// case KVI_DCC_THREAD_EVENT_DATA: -// { -// KviStr * d = ((KviThreadDataEvent<KviStr> *)e)->getData(); -// if(d->firstCharIs(0x01)) -// { -// d->cutLeft(1); -// if(d->lastCharIs(0x01))d->cutRight(1); -// if(kvi_strEqualCIN("ACTION",d->ptr(),6))d->cutLeft(6); -// d->stripLeftWhiteSpace(); -// output(KVI_OUT_ACTION,"%s %s",m_pDescriptor->szNick.ptr(),d->ptr()); -// } else { -// -//#ifdef COMPILE_CRYPT_SUPPORT -// if(KviCryptSessionInfo * cinf = cryptSessionInfo()) -// { -// if(cinf->bDoDecrypt) -// { -// if(cinf->pEngine->isCryptographicEngine() && (*(d->ptr()) == KVI_TEXT_CRYPT)) -// { -// KviStr decryptedStuff; -// if(cinf->pEngine->decrypt(d->ptr() + 1,decryptedStuff)) -// { -// m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSGCRYPTED, -// m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), -// m_pDescriptor->szHost.ptr(),decryptedStuff.ptr()); -// } else { -// output(KVI_OUT_SYSTEMERROR, -// __tr("The following message looks like an encrypted one, but the crypting engine failed to decode it: %s"), -// cinf->pEngine->lastError()); -// m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, -// m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), -// m_pDescriptor->szHost.ptr(),d->ptr() + 1); -// } -// delete d; -// return true; -// } else { -// if(!(cinf->pEngine->isCryptographicEngine())) -// { -// KviStr decryptedStuff; -// if(cinf->pEngine->decrypt(d->ptr(),decryptedStuff)) -// { -// m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, -// m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), -// m_pDescriptor->szHost.ptr(),decryptedStuff.ptr()); -// delete d; -// return true; -// } else { -// output(KVI_OUT_SYSTEMERROR, -// __tr("The following message looks like an encrypted one, but the crypting engine failed to decode it: %s"), -// cinf->pEngine->lastError()); -// } -// } -// } -// } -// } -//#endif -// m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, -// m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), -// m_pDescriptor->szHost.ptr(),d->ptr()); -// } -// delete d; -// return true; -// } -// break; -// } -// } - return KviWindow::event(e); -} - -void KviDccCanvas::resizeEvent(QResizeEvent *e) -{ - int hght = m_pInput->heightHint(); -// int hght2 = m_pTopSplitter->sizeHint().height(); -// m_pTopSplitter->setGeometry(0,0,width(),hght2); - m_pSplitter->setGeometry(0,0,width(),height() - hght); - m_pInput->setGeometry(0,height() - hght,width(),hght); -} - -QSize KviDccCanvas::sizeHint() const -{ - QSize ret(m_pIrcView->sizeHint().width(), - m_pIrcView->sizeHint().height() + m_pInput->heightHint()); - return ret; -} - -void KviDccCanvas::handleMarshalError(int err) -{ - QString sss = KviError::getDescription(err); - output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC Failed: %Q","dcc"),&sss); -} - -void KviDccCanvas::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())); - if(!(m_pDescriptor->bActive)) + + KviDccCanvas::~KviDccCanvas() { - // PASSIVE CONNECTION...Find out the remote end - m_pDescriptor->szIp = m_pMarshal->remoteIp(); - m_pDescriptor->szPort = m_pMarshal->remotePort(); - m_pDescriptor->szHost = m_pMarshal->remoteIp(); + g_pDccBroker->unregisterDccWindow(this); + // if(m_pSlaveThread) + // { + // m_pSlaveThread->terminate(); + // delete m_pSlaveThread; + // m_pSlaveThread = 0; + // } + KviThreadManager::killPendingEvents(this); + // delete m_pDescriptor; + // delete m_pMarshal; + } + + const QString & KviDccCanvas::target() + { + // This may change on the fly... + m_szTarget.sprintf("%s@%s:%s", + m_pDescriptor->szNick.utf8().data(),m_pDescriptor->szIp.utf8().data(),m_pDescriptor->szPort.utf8().data()); + return m_szTarget; + } + + void KviDccCanvas::fillCaptionBuffers() + { + KviStr tmp(KviStr::Format,"DCC Canvas %s@%s:%s", + m_pDescriptor->szNick.utf8().data(),m_pDescriptor->szIp.utf8().data(),m_pDescriptor->szPort.utf8().data()); + + m_szPlainTextCaption = tmp; + + m_szHtmlActiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", + KVI_OPTION_COLOR(KviOption_colorCaptionTextActive).name().ascii(),tmp.ptr()); + m_szHtmlInactiveCaption.sprintf("<nobr><font color=\"%s\"><b>%s</b></font></nobr>", + KVI_OPTION_COLOR(KviOption_colorCaptionTextInactive).name().ascii(),tmp.ptr()); + } + + QPixmap * KviDccCanvas::myIconPtr() + { + return g_pIconManager->getSmallIcon(KVI_SMALLICON_CANVAS); } - updateCaption(); -// m_pSlaveThread = new KviDccCanvasThread(this,m_pMarshal->releaseSocket()); -// m_pSlaveThread->start(); -} - -#include "m_canvas.moc" + void KviDccCanvas::getBaseLogFileName(KviStr &buffer) + { + buffer.sprintf("%s_%s_%s",m_pDescriptor->szNick.utf8().data(),m_pDescriptor->szIp.utf8().data(),m_pDescriptor->szPort.utf8().data()); + } + void KviDccCanvas::ownMessage(const char * text) + { + KviStr buf(KviStr::Format,"%s\r\n",text); + // m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); + m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_OWNPRIVMSG, + m_pDescriptor->szLocalNick.utf8().data(),m_pDescriptor->szLocalUser.utf8().data(), + m_pDescriptor->szLocalHost.utf8().data(),text); + } + + void KviDccCanvas::ownAction(const char * text) + { + KviStr buf(KviStr::Format,"%cACTION %s%c\r\n",text); + // m_pSlaveThread->sendRawData(buf.ptr(),buf.len()); + output(KVI_OUT_ACTION,"%Q %s",&(m_pDescriptor->szLocalNick),text); + } + + bool KviDccCanvas::event(QEvent *e) + { + // if(e->type() == KVI_THREAD_EVENT) + // { + // switch(((KviThreadEvent *)e)->id()) + // { + // case KVI_DCC_THREAD_EVENT_ERROR: + // { + // int * err = ((KviThreadDataEvent<int> *)e)->getData(); + // output(KVI_OUT_DCCERROR,__tr("ERROR: %s"),kvi_getErrorString(*err)); + // delete err; + // return true; + // } + // break; + // case KVI_DCC_THREAD_EVENT_DATA: + // { + // KviStr * d = ((KviThreadDataEvent<KviStr> *)e)->getData(); + // if(d->firstCharIs(0x01)) + // { + // d->cutLeft(1); + // if(d->lastCharIs(0x01))d->cutRight(1); + // if(kvi_strEqualCIN("ACTION",d->ptr(),6))d->cutLeft(6); + // d->stripLeftWhiteSpace(); + // output(KVI_OUT_ACTION,"%s %s",m_pDescriptor->szNick.ptr(),d->ptr()); + // } else { + // + //#ifdef COMPILE_CRYPT_SUPPORT + // if(KviCryptSessionInfo * cinf = cryptSessionInfo()) + // { + // if(cinf->bDoDecrypt) + // { + // if(cinf->pEngine->isCryptographicEngine() && (*(d->ptr()) == KVI_TEXT_CRYPT)) + // { + // KviStr decryptedStuff; + // if(cinf->pEngine->decrypt(d->ptr() + 1,decryptedStuff)) + // { + // m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSGCRYPTED, + // m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), + // m_pDescriptor->szHost.ptr(),decryptedStuff.ptr()); + // } else { + // output(KVI_OUT_SYSTEMERROR, + // __tr("The following message looks like an encrypted one, but the crypting engine failed to decode it: %s"), + // cinf->pEngine->lastError()); + // m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, + // m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), + // m_pDescriptor->szHost.ptr(),d->ptr() + 1); + // } + // delete d; + // return true; + // } else { + // if(!(cinf->pEngine->isCryptographicEngine())) + // { + // KviStr decryptedStuff; + // if(cinf->pEngine->decrypt(d->ptr(),decryptedStuff)) + // { + // m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, + // m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), + // m_pDescriptor->szHost.ptr(),decryptedStuff.ptr()); + // delete d; + // return true; + // } else { + // output(KVI_OUT_SYSTEMERROR, + // __tr("The following message looks like an encrypted one, but the crypting engine failed to decode it: %s"), + // cinf->pEngine->lastError()); + // } + // } + // } + // } + // } + //#endif + // m_pFrm->firstConsole()->outputPrivmsg(this,KVI_OUT_DCCCHATMSG, + // m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(), + // m_pDescriptor->szHost.ptr(),d->ptr()); + // } + // delete d; + // return true; + // } + // break; + // } + // } + return KviWindow::event(e); + } + + void KviDccCanvas::resizeEvent(QResizeEvent *e) + { + int hght = m_pInput->heightHint(); + // int hght2 = m_pTopSplitter->sizeHint().height(); + // m_pTopSplitter->setGeometry(0,0,width(),hght2); + m_pSplitter->setGeometry(0,0,width(),height() - hght); + m_pInput->setGeometry(0,height() - hght,width(),hght); + } + + QSize KviDccCanvas::sizeHint() const + { + QSize ret(m_pIrcView->sizeHint().width(), + m_pIrcView->sizeHint().height() + m_pInput->heightHint()); + return ret; + } + + void KviDccCanvas::handleMarshalError(int err) + { + QString sss = KviError::getDescription(err); + output(KVI_OUT_DCCERROR,__tr2qs_ctx("DCC Failed: %Q","dcc"),&sss); + } + + void KviDccCanvas::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())); + if(!(m_pDescriptor->bActive)) + { + // PASSIVE CONNECTION...Find out the remote end + m_pDescriptor->szIp = m_pMarshal->remoteIp(); + m_pDescriptor->szPort = m_pMarshal->remotePort(); + m_pDescriptor->szHost = m_pMarshal->remoteIp(); + } + updateCaption(); + // m_pSlaveThread = new KviDccCanvasThread(this,m_pMarshal->releaseSocket()); + // m_pSlaveThread->start(); + } + + #include "m_canvas.moc" #endif diff --git a/src/modules/dcc/canvas.h b/src/modules/dcc/canvas.h index 10a0d72ee..887ab48c6 100644 --- a/src/modules/dcc/canvas.h +++ b/src/modules/dcc/canvas.h @@ -25,50 +25,43 @@ #include "broker.h" #ifdef COMPILE_DCC_CANVAS - -#include "kvi_window.h" -#include "kvi_string.h" - -#include "descriptor.h" -#include "window.h" -#include "thread.h" - -#include "kvi_pointerlist.h" - - - -class KviDccMarshal; -class KviCanvasWidget; - -class QSplitter; - - -class KviDccCanvas : public KviDccWindow -{ - Q_OBJECT -public: - KviDccCanvas(KviFrame *pFrm,KviDccDescriptor * dcc,const char * name); - ~KviDccCanvas(); -protected: -// KviDccCanvasThread * m_pSlaveThread; - KviCanvasWidget * m_pCanvas; -// QSplitter * m_pTopSplitter; - QString m_szTarget; -protected: - virtual const QString &target(); - virtual void fillCaptionBuffers(); - virtual void getBaseLogFileName(KviStr &buffer); - virtual QPixmap * myIconPtr(); - virtual void resizeEvent(QResizeEvent *e); - virtual QSize sizeHint() const; - virtual bool event(QEvent *e); - virtual void ownMessage(const char *text); - virtual void ownAction(const char *text); -protected slots: - void handleMarshalError(int err); - void connected(); -}; - + #include "descriptor.h" + #include "window.h" + #include "thread.h" + + #include "kvi_window.h" + #include "kvi_string.h" + #include "kvi_pointerlist.h" + + class KviDccMarshal; + class KviCanvasWidget; + class QSplitter; + + class KviDccCanvas : public KviDccWindow + { + Q_OBJECT + public: + KviDccCanvas(KviFrame *pFrm,KviDccDescriptor * dcc,const char * name); + ~KviDccCanvas(); + protected: + // KviDccCanvasThread * m_pSlaveThread; + KviCanvasWidget * m_pCanvas; + // QSplitter * m_pTopSplitter; + QString m_szTarget; + protected: + virtual const QString &target(); + virtual void fillCaptionBuffers(); + virtual void getBaseLogFileName(KviStr &buffer); + virtual QPixmap * myIconPtr(); + virtual void resizeEvent(QResizeEvent *e); + virtual QSize sizeHint() const; + virtual bool event(QEvent *e); + virtual void ownMessage(const char *text); + virtual void ownAction(const char *text); + protected slots: + void handleMarshalError(int err); + void connected(); + }; #endif #endif // _CANVAS_H_ diff --git a/src/modules/dcc/canvaswidget.cpp b/src/modules/dcc/canvaswidget.cpp index ef5d70495..e598f04bf 100644 --- a/src/modules/dcc/canvaswidget.cpp +++ b/src/modules/dcc/canvaswidget.cpp @@ -23,1579 +23,1488 @@ #include "canvaswidget.h" #ifdef COMPILE_DCC_CANVAS - - -#include <qcursor.h> -#include <qpainter.h> -#include <qsimplerichtext.h> -#include <qlineedit.h> -#include <qcombobox.h> -#include <qvalidator.h> -#include <stdlib.h> - -#include "kvi_string.h" - -#include "kvi_locale.h" -#include "kvi_tal_popupmenu.h" - -#include <math.h> - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// KviCanvasRectangleItem -// - -KviCanvasRectangleItem::KviCanvasRectangleItem(QCanvas * c,int x,int y,int w,int h) -: QCanvasRectangle(x,y,w,h,c) -{ -} - -KviCanvasRectangleItem::~KviCanvasRectangleItem() -{ -} - -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()) + #include "kvi_string.h" + #include "kvi_locale.h" + #include "kvi_tal_popupmenu.h" + + #include <QCursor> + #include <QPainter> + #include <q3simplerichtext.h> + #include <QLineEdit> + #include <QComboBox> + #include <QValidator> + + #include <math.h> + #include <stdlib.h> + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasRectangleItem + // + + KviCanvasRectangleItem::KviCanvasRectangleItem(QCanvas * c,int x,int y,int w,int h) + : QCanvasRectangle(x,y,w,h,c) { - m_properties.replace(property,val); - hide(); - show(); } -} - - - - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// 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++) + KviCanvasRectangleItem::~KviCanvasRectangleItem() { - 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()) + + void KviCanvasRectangleItem::drawSelection(QPainter &p) { - 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")) + 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()) { - if(m_properties["bHasBackground"].asBool()) - setBrush(QBrush(m_properties["clrBackground"].asColor())); - else - setBrush(QBrush()); - } else { - hide(); show(); + m_properties.replace(property,val); + hide(); + show(); } } -} - -void KviCanvasPolygon::draw(QPainter &p) -{ -#if QT_VERSION >= 300 - if(isEnabled()) -#else - if(enabled()) -#endif + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasPolygon + // + KviCanvasPolygon::KviCanvasPolygon(QCanvas * c,int x,int y,QPointArray &pnts,double dScaleFactor) + : QCanvasPolygon(c) { - p.setBrush(brush()); - p.setPen(pen()); - p.drawPolygon(areaPoints()); + 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); } - -#if QT_VERSION >=300 - if(isSelected()) -#else - if(selected()) -#endif + + KviCanvasPolygon::~KviCanvasPolygon() { - 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))); } -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// 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)); - - m_properties.insert("clrBackground",QVariant(QColor(0,0,0))); - m_properties.insert("bHasBackground",QVariant(false,1)); - -// m_properties.insert("iStartAngle",QVariant(0)); -// m_properties.insert("iEndAngle",QVariant(360)); -} - -KviCanvasEllipticItem::~KviCanvasEllipticItem() -{ -} - -void KviCanvasEllipticItem::draw(QPainter &p) -{ -#if QT_VERSION >= 300 - if(isEnabled()) -#else - if(enabled()) -#endif + + void KviCanvasPolygon::setScaleFactor(double dScaleFactor) { - 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); + m_dScaleFactor = dScaleFactor; + resetPoints(); } - -#if QT_VERSION >= 300 - if(isSelected())drawSelection(p); -#else - if(selected())drawSelection(p); -#endif -} - -void KviCanvasEllipticItem::drawContent(QPainter &p) -{ -} - - -void KviCanvasEllipticItem::setProperty(const QString & property,const QVariant &val) -{ - if(m_properties[property].isValid()) + + void KviCanvasPolygon::setInternalPoints(const QPointArray &pnts) { - m_properties.replace(property,val); - if((property == "clrForeground") || (property == "uLineWidth")) - { - setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); - } else { - hide(); show(); - } + m_points = pnts; + resetPoints(); + } -} - -int KviCanvasEllipticItem::rtti() const -{ - return KVI_CANVAS_RTTI_ELLIPSE; -} - - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// KviCanvasEllipse -// - - -KviCanvasEllipse::KviCanvasEllipse(QCanvas * c,int x,int y,int w,int h) -: KviCanvasEllipticItem(c,x,y,w,h) -{ -} - -KviCanvasEllipse::~KviCanvasEllipse() -{ -} - -int KviCanvasEllipse::rtti() const -{ - return KVI_CANVAS_RTTI_ELLIPSE; -} - -void KviCanvasEllipse::drawContent(QPainter &p) -{ - p.drawEllipse((int)x(),(int)y(),width(),height()); -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// KviCanvasPie -// - - -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()) + + void KviCanvasPolygon::resetPoints() { - m_properties.replace(property,val); - if((property == "clrForeground") || (property == "uLineWidth")) + QPointArray scaled(m_points.size()); + for(unsigned int i=0;i<m_points.size();i++) { - setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); - } else { - hide(); show(); + 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); } -} - -void KviCanvasRectangle::draw(QPainter & p) -{ -#if QT_VERSION >= 300 - if(isEnabled()) -#else - if(enabled()) -#endif + + int KviCanvasPolygon::rtti() const { - if(m_properties["bHasBackground"].asBool()) + return KVI_CANVAS_RTTI_POLYGON; + } + + void KviCanvasPolygon::setProperty(const QString &property,const QVariant &val) + { + if(m_properties[property].isValid()) { - p.fillRect((int)x() + 1,(int)y() + 1,width() - 2,height() - 2,m_properties["clrBackground"].asColor()); + 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 { + hide(); show(); + } } - p.setPen(pen()); - p.drawRect((int)x(),(int)y(),width(),height()); } -#if QT_VERSION >= 300 - if(isSelected())drawSelection(p); -#else - if(selected())drawSelection(p); -#endif -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// 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("<center>Insert here your <font color=\"#FF0000\"><b>RICH TEXT</b></font></center>"))); - m_properties.insert("fntDefault",QVariant(f)); -} - -KviCanvasRichText::~KviCanvasRichText() -{ -} - -int KviCanvasRichText::rtti() const -{ - return KVI_CANVAS_RTTI_RICHTEXT; -} - -void KviCanvasRichText::draw(QPainter & p) -{ -#if QT_VERSION >= 300 - if(isEnabled()) -#else - if(enabled()) -#endif + + void KviCanvasPolygon::draw(QPainter &p) { - QString szText = m_properties["szText"].asString(); - QSimpleRichText text(szText,m_properties["fntDefault"].asFont()); - text.setWidth(width()); -#if QT_VERSION >= 300 - text.draw(&p,(int)x() + 1,(int)y() + 1,QRegion(QRect((int)x() + 1,(int)y() + 1,width(),height())),QColorGroup()); -#else - text.draw(&p,(int)x() + 1,(int)y() + 1,QRegion(QRect((int)x() + 1,(int)y() + 1,width(),height())),QPalette()); -#endif + if(isEnabled()) + { + p.setBrush(brush()); + p.setPen(pen()); + p.drawPolygon(areaPoints()); + } + + 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))); + } } -#if QT_VERSION >= 300 - if(isSelected())drawSelection(p); -#else - if(selected())drawSelection(p); -#endif -} - - - - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// 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() -{ -} - -void KviCanvasLine::setProperty(const QString &property,const QVariant &val) -{ - m_properties.replace(property,val); - if((property == "uLineWidth") || (property == "clrForeground")) + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasEllipticItem + // + + KviCanvasEllipticItem::KviCanvasEllipticItem(QCanvas * c,int x,int y,int w,int h) + : KviCanvasRectangleItem(c,x,y,w,h) { - setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); + 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_properties.insert("iStartAngle",QVariant(0)); + // m_properties.insert("iEndAngle",QVariant(360)); } -} - -int KviCanvasLine::rtti() const -{ - return KVI_CANVAS_RTTI_LINE; -} - -void KviCanvasLine::draw(QPainter &p) -{ -#if QT_VERSION >= 300 - if(isEnabled()) -#else - if(enabled()) -#endif + + KviCanvasEllipticItem::~KviCanvasEllipticItem() { - p.setPen(pen()); - p.drawLine(startPoint(),endPoint()); } - -#if QT_VERSION >= 300 - if(isSelected()) -#else - if(selected()) -#endif + + void KviCanvasEllipticItem::draw(QPainter &p) { - p.setRasterOp(NotROP); - p.setPen(QPen(DotLine)); - p.drawLine(startPoint(),endPoint()); - p.setRasterOp(CopyROP); + 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); + } + + if(isSelected())drawSelection(p); } -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// KviCanvasView -// - -KviCanvasView::KviCanvasView(QCanvas * c,KviCanvasWidget * 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 - -static void calcPolygonPoints(QPointArray &pnts,unsigned int nVertices) -{ - double dDelta = (2 * M_PI) / nVertices; - for(unsigned int i=0;i<nVertices;i++) + + void KviCanvasEllipticItem::drawContent(QPainter &p) { - 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; - - switch(o) + + void KviCanvasEllipticItem::setProperty(const QString & property,const QVariant &val) { - 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: + if(m_properties[property].isValid()) { - 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); + m_properties.replace(property,val); + if((property == "clrForeground") || (property == "uLineWidth")) + { + setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); + } else { + hide(); show(); + } } - break; - case PolygonPentagon: + } + + int KviCanvasEllipticItem::rtti() const + { + return KVI_CANVAS_RTTI_ELLIPSE; + } + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasEllipse + // + + + KviCanvasEllipse::KviCanvasEllipse(QCanvas * c,int x,int y,int w,int h) + : KviCanvasEllipticItem(c,x,y,w,h) + { + } + + KviCanvasEllipse::~KviCanvasEllipse() + { + } + + int KviCanvasEllipse::rtti() const + { + return KVI_CANVAS_RTTI_ELLIPSE; + } + + void KviCanvasEllipse::drawContent(QPainter &p) + { + p.drawEllipse((int)x(),(int)y(),width(),height()); + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasPie + // + + + 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()) { - QPointArray pa(5); - calcPolygonPoints(pa,5); - r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1); + m_properties.replace(property,val); + if((property == "clrForeground") || (property == "uLineWidth")) + { + setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); + } else { + hide(); show(); + } } - break; - case PolygonHexagon: + } + + void KviCanvasRectangle::draw(QPainter & p) + { + if(isEnabled()) { - QPointArray pa(6); - calcPolygonPoints(pa,6); - r = new KviCanvasPolygon(canvas(),pnt.x(),pnt.y(),pa,0.1); + 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()); } - break; + + if(isSelected())drawSelection(p); } - - if(r) + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasRichText + // + KviCanvasRichText::KviCanvasRichText(QCanvas * c,int x,int y,int w,int h) + : KviCanvasRectangleItem(c,x,y,w,h) { - setItemSelected(r); - r->setEnabled(true); - r->show(); + QFont f = QFont(); + f.setStyleHint(QFont::SansSerif); + f.setPointSize(12); + m_properties.insert("szText",QVariant(QString("<center>Insert here your <font color=\"#FF0000\"><b>RICH TEXT</b></font></center>"))); + m_properties.insert("fntDefault",QVariant(f)); } - - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(r)) + + KviCanvasRichText::~KviCanvasRichText() { - 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(); -} - -void KviCanvasView::setItemSelected(QCanvasItem * it) -{ - clearSelection(); - it->setSelected(true); - m_pSelectedItem = it; - m_pCanvasWidget->m_pPropertiesWidget->editItem(it); - -} - -void KviCanvasView::clearSelection() -{ - if(!m_pSelectedItem)return; - m_pSelectedItem->setSelected(false); - m_pSelectedItem = 0; - m_pCanvasWidget->m_pPropertiesWidget->editItem(0); -} - - - -void KviCanvasView::beginDragLine(KviCanvasLine * it,const QPoint &p,bool bInitial) -{ - QPoint sp = it->startPoint(); - - m_dragBegin = p - sp; - - if(bInitial) + + int KviCanvasRichText::rtti() const { - m_dragMode = Bottom; - setCursor(sizeAllCursor); - return; + return KVI_CANVAS_RTTI_RICHTEXT; } - - if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) + + void KviCanvasRichText::draw(QPainter & p) { - m_dragMode = Top; - setCursor(sizeAllCursor); - return; + 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); } - - sp = it->endPoint(); - if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasLine + // + KviCanvasLine::KviCanvasLine(QCanvas * c,int x1,int y1,int x2,int y2) + : QCanvasLine(c) { - m_dragMode = Bottom; - setCursor(sizeAllCursor); - return; + setPoints(x1,y1,x2,y2); + m_properties.insert("uLineWidth",QVariant((unsigned int)0)); + m_properties.insert("clrForeground",QVariant(QColor())); } - - m_dragMode = All; - setCursor(pointingHandCursor); -} - -void KviCanvasView::dragLine(KviCanvasLine * it,const QPoint &p) -{ - switch(m_dragMode) + + KviCanvasLine::~KviCanvasLine() + { + } + + void KviCanvasLine::setProperty(const QString &property,const QVariant &val) { - case Bottom: + m_properties.replace(property,val); + if((property == "uLineWidth") || (property == "clrForeground")) { - QPoint sp = it->startPoint(); - it->setPoints(sp.x(),sp.y(),p.x(),p.y()); + setPen(QPen(m_properties["clrForeground"].asColor(),m_properties["uLineWidth"].toInt())); } - break; - case Top: + } + + int KviCanvasLine::rtti() const + { + return KVI_CANVAS_RTTI_LINE; + } + + void KviCanvasLine::draw(QPainter &p) + { + if(isEnabled()) { - QPoint ep = it->endPoint(); - it->setPoints(p.x(),p.y(),ep.x(),ep.y()); + p.setPen(pen()); + p.drawLine(startPoint(),endPoint()); } - break; - case All: + + if(isSelected()) { - QPoint sp = p - m_dragBegin; - QPoint ep = sp + (it->endPoint() - it->startPoint()); - it->setPoints(sp.x(),sp.y(),ep.x(),ep.y()); + p.setRasterOp(NotROP); + p.setPen(QPen(DotLine)); + p.drawLine(startPoint(),endPoint()); + p.setRasterOp(CopyROP); } - 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)| + // KviCanvasView // - - //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;i<pa.size();i++) + KviCanvasView::KviCanvasView(QCanvas * c,KviCanvasWidget * cw,QWidget * par) + : QCanvasView(c,par) { - 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; - } + m_pCanvasWidget = cw; + m_state = Idle; + m_dragMode = None; + m_pSelectedItem = 0; + viewport()->setMouseTracking(true); } - - if(bShift) + + KviCanvasView::~KviCanvasView() { - m_dragMode = Scale; - m_dragScaleFactor = it->scaleFactor(); - setCursor(sizeAllCursor); - return; } - - if(bCtrl) + + void KviCanvasView::insertRectangle() { - m_dragMode = Rotate; - m_dragPointArray = it->internalPoints(); -// debug("Here"); - setCursor(sizeHorCursor); - return; + m_state = SelectOrigin; + setCursor(crossCursor); + m_objectToInsert = Rectangle; } - - m_dragMode = All; - setCursor(pointingHandCursor); -} - -void KviCanvasView::dragPolygon(KviCanvasPolygon * it,const QPoint &p) -{ - switch(m_dragMode) + + void KviCanvasView::insertRichText() { - 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: + 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 + + static void calcPolygonPoints(QPointArray &pnts,unsigned int nVertices) + { + double dDelta = (2 * M_PI) / nVertices; + for(unsigned int i=0;i<nVertices;i++) { - 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); + double dAng = dDelta * i; + double theX = 300 * sin(dAng); + double theY = 300 * cos(dAng); + pnts.setPoint(i,(int)theX,(int)theY); } - break; - case Rotate: + } + + void KviCanvasView::insertObjectAt(const QPoint & pnt,ObjectType o) + { + QCanvasItem * r = 0; + + switch(o) { - 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()); -// debug("%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++) + 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: { - 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); + 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); } - it->setInternalPoints(thePoints); + 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; + } + + 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); + 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; } - break; - default: - break; + + // canvas()->update(); } - 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) + + void KviCanvasView::setItemSelected(QCanvasItem * it) { - // Right bottom - m_dragMode = RightBottom; - setCursor(sizeFDiagCursor); - return; + clearSelection(); + it->setSelected(true); + m_pSelectedItem = it; + m_pCanvasWidget->m_pPropertiesWidget->editItem(it); + } - - if(p.x() < (((int)it->x()) + 2)) + + void KviCanvasView::clearSelection() { - // Left edge - if(p.y() < (((int)it->y()) + 2)) + if(!m_pSelectedItem)return; + m_pSelectedItem->setSelected(false); + m_pSelectedItem = 0; + m_pCanvasWidget->m_pPropertiesWidget->editItem(0); + } + + void KviCanvasView::beginDragLine(KviCanvasLine * it,const QPoint &p,bool bInitial) + { + QPoint sp = it->startPoint(); + + m_dragBegin = p - sp; + + if(bInitial) { - // Left top - m_dragMode = LeftTop; - setCursor(sizeFDiagCursor); + m_dragMode = Bottom; + setCursor(sizeAllCursor); return; } - if(p.y() > ( it->bottom() - 2)) + + if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) { - // Left bottom - m_dragMode = LeftBottom; - setCursor(sizeBDiagCursor); + m_dragMode = Top; + setCursor(sizeAllCursor); return; } - m_dragMode = Left; - setCursor(sizeHorCursor); - return; - } - - if(p.x() > (it->right() - 2)) - { - // Right edge - if(p.y() < (((int)it->y()) + 2)) + + sp = it->endPoint(); + if((abs(p.x() - sp.x()) < 3) && (abs(p.y() - sp.y()) < 3)) { - // Right top - m_dragMode = RightTop; - setCursor(sizeBDiagCursor); + m_dragMode = Bottom; + setCursor(sizeAllCursor); return; } - if(p.y() > ( it->bottom() - 2)) + + m_dragMode = All; + setCursor(pointingHandCursor); + } + + void KviCanvasView::dragLine(KviCanvasLine * it,const QPoint &p) + { + switch(m_dragMode) { - // Right bottom - m_dragMode = RightBottom; - setCursor(sizeFDiagCursor); - return; + 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: + { + 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; } - m_dragMode = Right; - setCursor(sizeHorCursor); - return; + canvas()->update(); } - // Somewhere in the middle - if(p.y() < (((int)it->y()) + 2)) + static double ssm_2d_rotationAngleFromXAxis(double dx,double dy) { - // Top - m_dragMode = Top; - setCursor(sizeVerCursor); - return; + // + // 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; } - if(p.y() > ( it->bottom() - 2)) + + static double ssm_2d_rotationAngle(double drefx,double drefy,double drotatedx,double drotatedy) { - // Bottom - m_dragMode = Bottom; - setCursor(sizeVerCursor); - return; + double dRefAngle = ssm_2d_rotationAngleFromXAxis(drefx,drefy); + double dRotAngle = ssm_2d_rotationAngleFromXAxis(drotatedx,drotatedy); + return dRotAngle - dRefAngle; } - - m_dragMode = All; - setCursor(pointingHandCursor); -} - -void KviCanvasView::dragRectangle(KviCanvasRectangleItem * it,const QPoint & p) -{ - - int aux1,aux2,aux3,aux4; - - switch(m_dragMode) + + static void ssm_2d_rotate(double &dx,double &dy,double dAngle) { - 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) + // 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;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) { - aux3 += (aux1 - 1); - aux1 = 1; + // We're dragging a point + m_dragMode = SinglePoint; + m_dragPointIndex = i; + setCursor(crossCursor); + return; } - aux2 = it->height() + (int)(it->y() - p.y()); - aux4 = p.y(); - if(aux2 < 1) + } + + if(bShift) + { + m_dragMode = Scale; + m_dragScaleFactor = it->scaleFactor(); + setCursor(sizeAllCursor); + return; + } + + if(bCtrl) + { + m_dragMode = Rotate; + m_dragPointArray = it->internalPoints(); + // debug("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: { - aux4 += (aux2 - 1); - aux2 = 1; + 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); } - 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) + break; + case Scale: { - aux4 += (aux2 - 1); - aux2 = 1; + 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); } - 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) + break; + case Rotate: { - aux3 += (aux1 - 1); - aux1 = 1; + 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()); + // debug("%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); } - 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; + break; + default: + break; + } + canvas()->update(); } - - canvas()->update(); -} - -void KviCanvasView::contentsMouseMoveEvent(QMouseEvent *e) -{ -// QPoint p = inverseWorldMatrix().map(e->pos()); - QPoint p = e->pos(); - if(e->state() & Qt::LeftButton) + + void KviCanvasView::beginDragRectangle(KviCanvasRectangleItem * it,const QPoint & p,bool bInitial) { - if((m_dragMode != None) && (m_pSelectedItem)) + m_dragBegin = QPoint((int)(p.x() - it->x()),(int)(p.y() - it->y())); + + if(bInitial) { -#if QT_VERSION >= 300 - if(m_pSelectedItem->isEnabled())m_pSelectedItem->setEnabled(false); -#else - if(m_pSelectedItem->enabled())m_pSelectedItem->setEnabled(false); -#endif - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) + // Right bottom + m_dragMode = RightBottom; + setCursor(sizeFDiagCursor); + return; + } + + if(p.x() < (((int)it->x()) + 2)) + { + // Left edge + if(p.y() < (((int)it->y()) + 2)) { - 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; + // 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; } - } else { - // Without buttons - if(m_state == Idle) - { - QCanvasItemList l = canvas()->collisions(p); - QCanvasItemList::Iterator it = l.begin(); - if(it != l.end()) + if(p.x() > (it->right() - 2)) + { + // Right edge + if(p.y() < (((int)it->y()) + 2)) { - // Got an item - QCanvasItem * hit = (QCanvasItem *)*it; - // Now find the point on that we have clicked it - if(hit == m_pSelectedItem) - { - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) - { - case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: - beginDragRectangle((KviCanvasRectangleItem *)m_pSelectedItem,p); - break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: - beginDragLine((KviCanvasLine *)m_pSelectedItem,p); - break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - beginDragPolygon((KviCanvasPolygon *)m_pSelectedItem,p); - break; - } - } - else if(m_dragMode != None)setCursor(arrowCursor); - } else { - if(m_dragMode != None)setCursor(arrowCursor); + // 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; } + + // 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::contentsMouseReleaseEvent(QMouseEvent *e) -{ - if(m_dragMode != None) + + void KviCanvasView::dragRectangle(KviCanvasRectangleItem * it,const QPoint & p) { - // Was just dragging a rectangle - m_dragMode = None; - setCursor(arrowCursor); - if(m_pSelectedItem) + + int aux1,aux2,aux3,aux4; + + switch(m_dragMode) { - m_pSelectedItem->setEnabled(true); - canvas()->update(); + 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; } + + canvas()->update(); } -} - -void KviCanvasView::contentsMousePressEvent(QMouseEvent *e) -{ - if(e->button() & Qt::LeftButton) + + void KviCanvasView::contentsMouseMoveEvent(QMouseEvent *e) { -// QPoint p = inverseWorldMatrix().map(e->pos()); + // QPoint p = inverseWorldMatrix().map(e->pos()); QPoint p = e->pos(); - - switch(m_state) + if(e->state() & Qt::LeftButton) { - case SelectOrigin: - clearSelection(); - setCursor(arrowCursor); - m_state = Idle; - insertObjectAt(p,m_objectToInsert); - canvas()->update(); - break; - - case Idle: + 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) { 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(); - } + QCanvasItem * hit = (QCanvasItem *)*it; // Now find the point on that we have clicked it - switch(KVI_CANVAS_RTTI_CONTROL_TYPE(hit)) + if(hit == m_pSelectedItem) { - 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; + switch(KVI_CANVAS_RTTI_CONTROL_TYPE(m_pSelectedItem)) + { + case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: + beginDragRectangle((KviCanvasRectangleItem *)m_pSelectedItem,p); + break; + case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: + beginDragLine((KviCanvasLine *)m_pSelectedItem,p); + break; + case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + beginDragPolygon((KviCanvasPolygon *)m_pSelectedItem,p); + break; + } } + else if(m_dragMode != None)setCursor(arrowCursor); } else { - // No item - clearSelection(); - canvas()->update(); + if(m_dragMode != None)setCursor(arrowCursor); } } - break; } } -} - - -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); - break; - 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); - break; - } - - canvas()->update(); -} - - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// KviVariantTableItem -// - - - -KviVariantTableItem::KviVariantTableItem(QTable * t,const QVariant & property) -: QTableItem(t,QTableItem::WhenCurrent,QString::null) -{ - m_property = property; -} - -KviVariantTableItem::~KviVariantTableItem() -{ -} - - -QWidget * KviVariantTableItem::createEditor() const -{ - switch(m_property.type()) + + void KviCanvasView::contentsMouseReleaseEvent(QMouseEvent *e) { - 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->insertItem("FALSE"); - b->insertItem("TRUE"); - b->setCurrentItem(m_property.toBool() ? 1 : 0); - return b; - } - break; - case QVariant::Color: + if(m_dragMode != None) { - 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->insertItem(tmp); - b->insertItem(tmpDefault + ", 8"); - b->insertItem(tmpDefault + ", 10"); - b->insertItem(tmpDefault + ", 12"); - b->insertItem(tmpDefault + ", 14"); - b->insertItem(tmpDefault + ", 16"); - b->insertItem(tmpDefault + ", 18"); - b->insertItem(tmpDefault + ", 20"); - b->insertItem(tmpDefault + ", 24"); - b->insertItem(tmpDefault + ", 28"); - b->insertItem(tmpDefault + ", 32"); - b->insertItem(tmpDefault + ", 40"); - b->insertItem(tmpDefault + ", 48"); - b->insertItem(f.family() + ", 12"); - b->setCurrentItem(0); - - b->setCurrentItem(m_property.toBool() ? 1 : 0); - return b; + // Was just dragging a rectangle + m_dragMode = None; + setCursor(arrowCursor); + if(m_pSelectedItem) + { + m_pSelectedItem->setEnabled(true); + canvas()->update(); + } } - break; - default: - break; } - return 0; -} - -void KviVariantTableItem::setContentFromEditor(QWidget * w) -{ - switch(m_property.type()) + + void KviCanvasView::contentsMousePressEvent(QMouseEvent *e) { - case QVariant::String: - m_property = QVariant(((QLineEdit *)w)->text()); - break; - case QVariant::Int: - m_property = QVariant(((QLineEdit *)w)->text().toInt()); - break; - case QVariant::UInt: - m_property = QVariant(((QLineEdit *)w)->text().toUInt()); - break; - case QVariant::Bool: - m_property = QVariant(((QComboBox *)w)->currentItem(),1); - break; - case QVariant::Color: - m_property.asColor().setNamedColor(((QLineEdit *)w)->text()); - break; - case QVariant::Font: + if(e->button() & Qt::LeftButton) { - KviStr txt = ((QComboBox *)w)->currentText(); - if(txt.hasData()) + // QPoint p = inverseWorldMatrix().map(e->pos()); + QPoint p = e->pos(); + + switch(m_state) { - KviStr fam = txt; - fam.cutFromFirst(',',true); - fam.stripWhiteSpace(); - KviStr psz = txt; - psz.cutToFirst(',',true); - psz.stripWhiteSpace(); - bool bOk; - unsigned int uSize = psz.toUInt(&bOk); - if(!bOk)uSize = 12; - m_property = QVariant(QFont(fam.ptr(),uSize)); + 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(); + + 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; - default: - break; } -} - - -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) + + 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); + break; + 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); + break; + } + + canvas()->update(); + } + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviVariantTableItem + // + KviVariantTableItem::KviVariantTableItem(QTable * t,const QVariant & property) + : QTableItem(t,QTableItem::WhenCurrent,QString::null) + { + m_property = property; + } + + KviVariantTableItem::~KviVariantTableItem() + { + } + + QWidget * KviVariantTableItem::createEditor() const { - 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(); + { + 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: - sz = m_property.toBool() ? "TRUE" : "FALSE"; + { + QComboBox * b = new QComboBox(false,table()->viewport()); + b->insertItem("FALSE"); + b->insertItem("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: - sz.setNum(m_property.toFont().pointSize()); - sz.prepend(", "); - sz.prepend(m_property.toFont().family()); + { + 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->insertItem(tmp); + b->insertItem(tmpDefault + ", 8"); + b->insertItem(tmpDefault + ", 10"); + b->insertItem(tmpDefault + ", 12"); + b->insertItem(tmpDefault + ", 14"); + b->insertItem(tmpDefault + ", 16"); + b->insertItem(tmpDefault + ", 18"); + b->insertItem(tmpDefault + ", 20"); + b->insertItem(tmpDefault + ", 24"); + b->insertItem(tmpDefault + ", 28"); + b->insertItem(tmpDefault + ", 32"); + b->insertItem(tmpDefault + ", 40"); + b->insertItem(tmpDefault + ", 48"); + b->insertItem(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) + { + switch(m_property.type()) + { + case QVariant::String: + m_property = QVariant(((QLineEdit *)w)->text()); break; case QVariant::Int: - sz.setNum(m_property.toInt()); + m_property = QVariant(((QLineEdit *)w)->text().toInt()); break; case QVariant::UInt: - sz.setNum(m_property.toUInt()); + m_property = QVariant(((QLineEdit *)w)->text().toUInt()); + break; + case QVariant::Bool: + m_property = QVariant(((QComboBox *)w)->currentItem(),1); + break; + case QVariant::Color: + m_property.asColor().setNamedColor(((QLineEdit *)w)->text()); + break; + case QVariant::Font: + { + KviStr txt = ((QComboBox *)w)->currentText(); + if(txt.hasData()) + { + KviStr fam = txt; + fam.cutFromFirst(',',true); + fam.stripWhiteSpace(); + KviStr psz = txt; + psz.cutToFirst(',',true); + psz.stripWhiteSpace(); + bool bOk; + unsigned int uSize = psz.toUInt(&bOk); + if(!bOk)uSize = 12; + m_property = QVariant(QFont(fam.ptr(),uSize)); + } + } break; default: break; } - 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) + + 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) + { + 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(); + break; + 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()); + break; + case QVariant::Int: + sz.setNum(m_property.toInt()); + break; + case QVariant::UInt: + sz.setNum(m_property.toUInt()); + break; + default: + break; + } + 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) + { + for(int i=0;i<numRows();i++) + { + clearCell(i,0); + clearCell(i,1); + clearCellWidget(i,1); + } + setNumRows(0); + return; + } + + QMap<QString,QVariant> * m = 0; + + 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(); + break; + case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: + m = ((KviCanvasPolygon *)it)->properties(); + break; + } + + if(!m) + { + editItem(0); + return; + } + for(int i=0;i<numRows();i++) { clearCell(i,0); clearCell(i,1); clearCellWidget(i,1); } - setNumRows(0); - return; - } - - QMap<QString,QVariant> * m = 0; - - 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(); - break; - case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: - m = ((KviCanvasPolygon *)it)->properties(); - break; + + setNumRows(m->count()); + + QTableItem * item; + + int idx = 0; + + for(QMap<QString,QVariant>::ConstIterator iter = m->begin();iter != m->end();++iter) + { + item = new QTableItem(this,QTableItem::Never,iter.key().utf8().data()); + setItem(idx,0,item); + item = new KviVariantTableItem(this,iter.data()); + setItem(idx,1,item); + idx++; + } + } - - if(!m) + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // + // KviCanvasWidget + // + KviCanvasWidget::KviCanvasWidget(QWidget * par) + : QWidget(par,"canvas_widget") { - editItem(0); - return; + 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<int> 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 &))); + + KviTalPopupMenu * add = new KviTalPopupMenu(m_pMenuBar); + KviTalPopupMenu * shapes = new KviTalPopupMenu(add); + KviTalPopupMenu * polygons = new KviTalPopupMenu(add); + KviTalPopupMenu * items = new KviTalPopupMenu(add); + shapes->insertItem(__tr2qs_ctx("&Line","dcc"),m_pCanvasView,SLOT(insertLine())); + shapes->insertItem(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertRectangle())); + shapes->insertItem(__tr2qs_ctx("&Ellipse","dcc"),m_pCanvasView,SLOT(insertEllipse())); + shapes->insertItem(__tr2qs_ctx("&Pie","dcc"),m_pCanvasView,SLOT(insertPie())); + shapes->insertItem(__tr2qs_ctx("&Chord","dcc"),m_pCanvasView,SLOT(insertChord())); + + items->insertItem(__tr2qs_ctx("&Rich text (html)","dcc"),m_pCanvasView,SLOT(insertRichText())); + + polygons->insertItem(__tr2qs_ctx("&Triangle","dcc"),m_pCanvasView,SLOT(insertPolygonTriangle())); + polygons->insertItem(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertPolygonRectangle())); + polygons->insertItem(__tr2qs_ctx("&Pentagon","dcc"),m_pCanvasView,SLOT(insertPolygonPentagon())); + polygons->insertItem(__tr2qs_ctx("&Hexagon","dcc"),m_pCanvasView,SLOT(insertPolygonHexagon())); + + add->insertItem(__tr2qs_ctx("&Shape","dcc"),shapes); + add->insertItem(__tr2qs_ctx("&Item","dcc"),items); + add->insertItem(__tr2qs_ctx("&Polygons","dcc"),polygons); + + m_pMenuBar->insertItem(__tr2qs_ctx("&Insert","dcc"),add); } - - for(int i=0;i<numRows();i++) + + KviCanvasWidget::~KviCanvasWidget() { - clearCell(i,0); - clearCell(i,1); - clearCellWidget(i,1); } - - setNumRows(m->count()); - - QTableItem * item; - - int idx = 0; - - for(QMap<QString,QVariant>::ConstIterator iter = m->begin();iter != m->end();++iter) + + void KviCanvasWidget::resizeEvent(QResizeEvent *) { - item = new QTableItem(this,QTableItem::Never,iter.key().utf8().data()); - setItem(idx,0,item); - item = new KviVariantTableItem(this,iter.data()); - setItem(idx,1,item); - idx++; + 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)); } - -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// KviCanvasWidget -// - -KviCanvasWidget::KviCanvasWidget(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<int> 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 &))); - - KviTalPopupMenu * add = new KviTalPopupMenu(m_pMenuBar); - KviTalPopupMenu * shapes = new KviTalPopupMenu(add); - KviTalPopupMenu * polygons = new KviTalPopupMenu(add); - KviTalPopupMenu * items = new KviTalPopupMenu(add); - shapes->insertItem(__tr2qs_ctx("&Line","dcc"),m_pCanvasView,SLOT(insertLine())); - shapes->insertItem(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertRectangle())); - shapes->insertItem(__tr2qs_ctx("&Ellipse","dcc"),m_pCanvasView,SLOT(insertEllipse())); - shapes->insertItem(__tr2qs_ctx("&Pie","dcc"),m_pCanvasView,SLOT(insertPie())); - shapes->insertItem(__tr2qs_ctx("&Chord","dcc"),m_pCanvasView,SLOT(insertChord())); - - items->insertItem(__tr2qs_ctx("&Rich text (html)","dcc"),m_pCanvasView,SLOT(insertRichText())); - - polygons->insertItem(__tr2qs_ctx("&Triangle","dcc"),m_pCanvasView,SLOT(insertPolygonTriangle())); - polygons->insertItem(__tr2qs_ctx("&Rectangle","dcc"),m_pCanvasView,SLOT(insertPolygonRectangle())); - polygons->insertItem(__tr2qs_ctx("&Pentagon","dcc"),m_pCanvasView,SLOT(insertPolygonPentagon())); - polygons->insertItem(__tr2qs_ctx("&Hexagon","dcc"),m_pCanvasView,SLOT(insertPolygonHexagon())); - - add->insertItem(__tr2qs_ctx("&Shape","dcc"),shapes); - add->insertItem(__tr2qs_ctx("&Item","dcc"),items); - add->insertItem(__tr2qs_ctx("&Polygons","dcc"),polygons); - - m_pMenuBar->insertItem(__tr2qs_ctx("&Insert","dcc"),add); -} - -KviCanvasWidget::~KviCanvasWidget() -{ -} - - - -void KviCanvasWidget::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)); -} - - -#include "m_canvaswidget.moc" - + + #include "m_canvaswidget.moc" #endif diff --git a/src/modules/dcc/canvaswidget.h b/src/modules/dcc/canvaswidget.h index 28d123e19..cf1d201f3 100644 --- a/src/modules/dcc/canvaswidget.h +++ b/src/modules/dcc/canvaswidget.h @@ -25,298 +25,283 @@ #include "broker.h" #ifdef COMPILE_DCC_CANVAS - - -#include <qcanvas.h> - -//#ifdef QT_NO_CANVAS -// #warning "HEre is not" -//#endif - - -#include <qmenubar.h> -#include <qlabel.h> - -#include <qmap.h> -#include <qvariant.h> -#include <qtable.h> -#include <qsplitter.h> - - - -class KviCanvasWidget; - - - -#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<QString,QVariant> 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<QString,QVariant> * 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<QString,QVariant> m_properties; -public: - int right(){ return ((int)x()) + width(); }; - int bottom(){ return ((int)y()) + height(); }; - QMap<QString,QVariant> * properties(){ return &m_properties; }; - virtual void setProperty(const QString &property,const QVariant &val); -// QVariant property(const QString &name){ return m_properties[name]; }; -protected: - void drawSelection(QPainter &p); -}; - - -class KviCanvasEllipticItem : public KviCanvasRectangleItem -{ - friend class KviCanvasEllipse; - friend class KviCanvasChord; - friend class KviCanvasPie; -protected: - KviCanvasEllipticItem(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasEllipticItem(); -public: - virtual void setProperty(const QString & property,const QVariant &val); - virtual void draw(QPainter & p); - virtual void drawContent(QPainter & p); - virtual int rtti() const; -}; - - -class KviCanvasEllipse : public KviCanvasEllipticItem -{ -public: - KviCanvasEllipse(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasEllipse(); -public: - virtual void drawContent(QPainter & p); - virtual int rtti() const; -}; - - -class KviCanvasPie : public KviCanvasEllipticItem -{ -public: - KviCanvasPie(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasPie(); -public: - virtual void drawContent(QPainter & p); - virtual int rtti() const; -}; - - -class KviCanvasChord : public KviCanvasEllipticItem -{ -public: - KviCanvasChord(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasChord(); -public: - virtual void drawContent(QPainter & p); - virtual int rtti() const; -}; - - -class KviCanvasLine : public QCanvasLine -{ -public: - KviCanvasLine(QCanvas * c,int x1,int y1,int x2,int y2); - virtual ~KviCanvasLine(); -protected: - QMap<QString,QVariant> m_properties; -public: - QMap<QString,QVariant> * properties(){ return &m_properties; }; - virtual void setProperty(const QString &property,const QVariant &val); -// QVariant property(const QString &name){ return m_properties[name]; }; - virtual void draw(QPainter & p); - virtual int rtti() const; -}; - - - -class KviCanvasRectangle : public KviCanvasRectangleItem -{ -public: - KviCanvasRectangle(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasRectangle(); -public: - virtual void draw(QPainter & p); - virtual void setProperty(const QString &property,const QVariant &val); - virtual int rtti() const; -}; - - -class KviCanvasRichText : public KviCanvasRectangleItem -{ -public: - KviCanvasRichText(QCanvas * c,int x,int y,int w,int h); - ~KviCanvasRichText(); -public: - virtual void draw(QPainter & p); - virtual int rtti() const; -}; - - -class KviCanvasView : public QCanvasView -{ - Q_OBJECT -public: - KviCanvasView(QCanvas * c,KviCanvasWidget * cw,QWidget * par); - ~KviCanvasView(); -public: - enum State { Idle , SelectOrigin }; - enum ObjectType { + #include <QCanvas> + + //#ifdef QT_NO_CANVAS + // #warning "Here is not" + //#endif + + + #include <QMenuBar> + #include <QLabel> + #include <QMap> + #include <QVariant> + #include <QTable> + #include <QSplitter> + + class KviCanvasWidget; + + #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<QString,QVariant> 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<QString,QVariant> * 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<QString,QVariant> m_properties; + public: + int right(){ return ((int)x()) + width(); }; + int bottom(){ return ((int)y()) + height(); }; + QMap<QString,QVariant> * properties(){ return &m_properties; }; + virtual void setProperty(const QString &property,const QVariant &val); + // QVariant property(const QString &name){ return m_properties[name]; }; + protected: + void drawSelection(QPainter &p); + }; + + + class KviCanvasEllipticItem : public KviCanvasRectangleItem + { + friend class KviCanvasEllipse; + friend class KviCanvasChord; + friend class KviCanvasPie; + protected: + KviCanvasEllipticItem(QCanvas * c,int x,int y,int w,int h); + ~KviCanvasEllipticItem(); + public: + virtual void setProperty(const QString & property,const QVariant &val); + virtual void draw(QPainter & p); + virtual void drawContent(QPainter & p); + virtual int rtti() const; + }; + + + class KviCanvasEllipse : public KviCanvasEllipticItem + { + public: + KviCanvasEllipse(QCanvas * c,int x,int y,int w,int h); + ~KviCanvasEllipse(); + public: + virtual void drawContent(QPainter & p); + virtual int rtti() const; + }; + + + class KviCanvasPie : public KviCanvasEllipticItem + { + public: + KviCanvasPie(QCanvas * c,int x,int y,int w,int h); + ~KviCanvasPie(); + public: + virtual void drawContent(QPainter & p); + virtual int rtti() const; + }; + + + class KviCanvasChord : public KviCanvasEllipticItem + { + public: + KviCanvasChord(QCanvas * c,int x,int y,int w,int h); + ~KviCanvasChord(); + public: + virtual void drawContent(QPainter & p); + virtual int rtti() const; + }; + + + class KviCanvasLine : public QCanvasLine + { + public: + KviCanvasLine(QCanvas * c,int x1,int y1,int x2,int y2); + virtual ~KviCanvasLine(); + protected: + QMap<QString,QVariant> m_properties; + public: + QMap<QString,QVariant> * properties(){ return &m_properties; }; + virtual void setProperty(const QString &property,const QVariant &val); + // QVariant property(const QString &name){ return m_properties[name]; }; + virtual void draw(QPainter & p); + virtual int rtti() const; + }; + + + class KviCanvasRectangle : public KviCanvasRectangleItem + { + public: + KviCanvasRectangle(QCanvas * c,int x,int y,int w,int h); + ~KviCanvasRectangle(); + public: + virtual void draw(QPainter & p); + virtual void setProperty(const QString &property,const QVariant &val); + virtual int rtti() const; + }; + + + class KviCanvasRichText : public KviCanvasRectangleItem + { + public: + KviCanvasRichText(QCanvas * c,int x,int y,int w,int h); + ~KviCanvasRichText(); + public: + virtual void draw(QPainter & p); + virtual int rtti() const; + }; + + + class KviCanvasView : public QCanvasView + { + Q_OBJECT + public: + KviCanvasView(QCanvas * c,KviCanvasWidget * cw,QWidget * par); + ~KviCanvasView(); + public: + enum State { Idle , SelectOrigin }; + enum ObjectType { Rectangle , RichText , Line , Ellipse , Chord , Pie , PolygonTriangle , PolygonRectangle , PolygonPentagon , PolygonHexagon - }; - enum DragMode { + }; + enum DragMode { None , All , Left , Right , Top , Bottom , LeftTop , RightTop , LeftBottom , RightBottom , Scale , SinglePoint , Rotate + }; + protected: + KviCanvasWidget * m_pCanvasWidget; + + // Insertion of objects + State m_state; + ObjectType m_objectToInsert; + + // Selected item + QCanvasItem * m_pSelectedItem; + + DragMode m_dragMode; + QPoint m_dragBegin; + double m_dragScaleFactor; + unsigned int m_dragPointIndex; + QPointArray m_dragPointArray; + protected: + void beginDragRectangle(KviCanvasRectangleItem * it,const QPoint &p,bool bInitial = false); + void dragRectangle(KviCanvasRectangleItem * it,const QPoint & p); + + void beginDragLine(KviCanvasLine * it,const QPoint &p,bool bInitial = false); + void dragLine(KviCanvasLine * it,const QPoint &p); + + void beginDragPolygon(KviCanvasPolygon * it,const QPoint &p,bool bShift = false,bool bCtrl = false); + void dragPolygon(KviCanvasPolygon * it,const QPoint &p); + + void setItemSelected(QCanvasItem * it); + void clearSelection(); + void insertObjectAt(const QPoint & pnt,ObjectType o); + virtual void contentsMousePressEvent(QMouseEvent *e); + virtual void contentsMouseMoveEvent(QMouseEvent *e); + virtual void contentsMouseReleaseEvent(QMouseEvent *e); + public slots: + void insertRectangle(); + void insertRichText(); + void insertLine(); + void insertPie(); + void insertChord(); + void insertEllipse(); + void insertPolygonTriangle(); + void insertPolygonRectangle(); + void insertPolygonPentagon(); + void insertPolygonHexagon(); + void propertyChanged(const QString &s,const QVariant &v); }; -protected: - KviCanvasWidget * m_pCanvasWidget; - - // Insertion of objects - State m_state; - ObjectType m_objectToInsert; - - // Selected item - QCanvasItem * m_pSelectedItem; - - DragMode m_dragMode; - QPoint m_dragBegin; - double m_dragScaleFactor; - unsigned int m_dragPointIndex; - QPointArray m_dragPointArray; -protected: - void beginDragRectangle(KviCanvasRectangleItem * it,const QPoint &p,bool bInitial = false); - void dragRectangle(KviCanvasRectangleItem * it,const QPoint & p); - - void beginDragLine(KviCanvasLine * it,const QPoint &p,bool bInitial = false); - void dragLine(KviCanvasLine * it,const QPoint &p); - - void beginDragPolygon(KviCanvasPolygon * it,const QPoint &p,bool bShift = false,bool bCtrl = false); - void dragPolygon(KviCanvasPolygon * it,const QPoint &p); - - - void setItemSelected(QCanvasItem * it); - void clearSelection(); - void insertObjectAt(const QPoint & pnt,ObjectType o); - virtual void contentsMousePressEvent(QMouseEvent *e); - virtual void contentsMouseMoveEvent(QMouseEvent *e); - virtual void contentsMouseReleaseEvent(QMouseEvent *e); -public slots: - void insertRectangle(); - void insertRichText(); - void insertLine(); - void insertPie(); - void insertChord(); - void insertEllipse(); - void insertPolygonTriangle(); - void insertPolygonRectangle(); - void insertPolygonPentagon(); - void insertPolygonHexagon(); - void propertyChanged(const QString &s,const QVariant &v); -}; - -// For Qt3.0 this might need to be changed - -class KviVariantTableItem : public QTableItem -{ -public: - KviVariantTableItem(QTable * t,const QVariant & property); - ~KviVariantTableItem(); -private: - QVariant m_property; -public: - virtual QWidget * createEditor() const; - virtual void setContentFromEditor(QWidget *w); - QVariant & property(){ return m_property; }; - virtual void paint(QPainter *p,const QColorGroup &cg,const QRect &cr,bool selected); -}; - - - -class KviCanvasItemPropertiesWidget : public QTable -{ - Q_OBJECT -public: - KviCanvasItemPropertiesWidget(QWidget * par); - ~KviCanvasItemPropertiesWidget(); -public: - void editItem(QCanvasItem * it); -protected slots: - void cellEdited(int row,int col); -signals: - void propertyChanged(const QString &s,const QVariant &v); -}; - - - -class KviCanvasWidget : public QWidget -{ - friend class KviCanvasView; - Q_OBJECT -public: - KviCanvasWidget(QWidget * par); - ~KviCanvasWidget(); -protected: - QSplitter * m_pSplitter; - QCanvas * m_pCanvas; - QMenuBar * m_pMenuBar; - KviCanvasView * m_pCanvasView; - QLabel * m_pStatusLabel; - KviCanvasItemPropertiesWidget * m_pPropertiesWidget; -protected: - virtual void resizeEvent(QResizeEvent *); -}; - + + // For Qt3.0 this might need to be changed + class KviVariantTableItem : public QTableItem + { + public: + KviVariantTableItem(QTable * t,const QVariant & property); + ~KviVariantTableItem(); + private: + QVariant m_property; + public: + virtual QWidget * createEditor() const; + virtual void setContentFromEditor(QWidget *w); + QVariant & property(){ return m_property; }; + virtual void paint(QPainter *p,const QColorGroup &cg,const QRect &cr,bool selected); + }; + + + class KviCanvasItemPropertiesWidget : public QTable + { + Q_OBJECT + public: + KviCanvasItemPropertiesWidget(QWidget * par); + ~KviCanvasItemPropertiesWidget(); + public: + void editItem(QCanvasItem * it); + protected slots: + void cellEdited(int row,int col); + signals: + void propertyChanged(const QString &s,const QVariant &v); + }; + + + class KviCanvasWidget : public QWidget + { + friend class KviCanvasView; + Q_OBJECT + public: + KviCanvasWidget(QWidget * par); + ~KviCanvasWidget(); + protected: + QSplitter * m_pSplitter; + QCanvas * m_pCanvas; + QMenuBar * m_pMenuBar; + KviCanvasView * m_pCanvasView; + QLabel * m_pStatusLabel; + KviCanvasItemPropertiesWidget * m_pPropertiesWidget; + protected: + virtual void resizeEvent(QResizeEvent *); + }; #endif #endif //_CANVAS_WIDGET_H_ diff --git a/src/modules/dcc/chat.cpp b/src/modules/dcc/chat.cpp index ef06da588..5bd2b26ca 100644 --- a/src/modules/dcc/chat.cpp +++ b/src/modules/dcc/chat.cpp @@ -56,6 +56,11 @@ #include "kvi_ircconnectionuserinfo.h" #include "kvi_kvs_eventtriggers.h" #include "kvi_qcstring.h" +#include "kvi_tal_vbox.h" + +#include <QSplitter> +#include <QEvent> +#include <QResizeEvent> #ifdef COMPILE_CRYPT_SUPPORT #include "kvi_crypt.h" @@ -63,17 +68,10 @@ #include "kvi_mirccntrl.h" #endif -#include <qsplitter.h> -#include <qevent.h> -#include "kvi_tal_vbox.h" - - #ifdef COMPILE_SSL_SUPPORT #include "kvi_sslmaster.h" #endif - - extern KviDccBroker * g_pDccBroker; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -162,7 +160,6 @@ void KviDccChat::startConnection() int ret = m_pMarshal->dccListen(m_pDescriptor->szListenIp,m_pDescriptor->szListenPort,m_pDescriptor->bDoTimeout); #endif if(ret != KviError_success)handleMarshalError(ret); - } else { // ACTIVE CONNECTION output(KVI_OUT_DCCMSG,__tr2qs_ctx("Attempting an active DCC %s connection","dcc"),m_pDescriptor->szType.utf8().data()); @@ -185,7 +182,6 @@ void KviDccChat::connectionInProgress() if(m_pDescriptor->bSendRequest) { - KviStr ip; if(!m_pDescriptor->szFakeIp.isEmpty()) { @@ -289,7 +285,6 @@ QPixmap * KviDccChat::myIconPtr() return g_pIconManager->getSmallIcon(KVI_SMALLICON_DCCMSG); } - void KviDccChat::getBaseLogFileName(KviStr &buffer) { buffer.sprintf("%s_%s_%s",m_pDescriptor->szNick.utf8().data(),m_pDescriptor->szIp.utf8().data(),m_pDescriptor->szPort.utf8().data()); @@ -543,13 +538,11 @@ KviDccChatThread::KviDccChatThread(KviWindow *wnd,kvi_socket_t fd) m_pOutBuffers->setAutoDelete(true); } - KviDccChatThread::~KviDccChatThread() { if(m_pOutBuffers)delete m_pOutBuffers; } - void KviDccChatThread::run() { KviDccThreadIncomingData data; diff --git a/src/modules/dcc/chat.h b/src/modules/dcc/chat.h index d309d1482..37552da19 100644 --- a/src/modules/dcc/chat.h +++ b/src/modules/dcc/chat.h @@ -24,20 +24,22 @@ // //============================================================================= -#include "kvi_window.h" -#include "kvi_string.h" -#include "kvi_databuffer.h" - #include "window.h" #include "descriptor.h" #include "thread.h" +#include "kvi_window.h" +#include "kvi_string.h" +#include "kvi_databuffer.h" #include "kvi_pointerlist.h" #ifdef COMPILE_SSL_SUPPORT class KviSSL; #endif +class KviDccMarshal; +class QSplitter; + class KviDccChatThread : public KviDccThread { public: @@ -60,8 +62,6 @@ public: virtual void sendRawData(const void * buffer,int len); // mutex (m_pOutBuffers usage) }; -class KviDccMarshal; -class QSplitter; class KviDccChat : public KviDccWindow { @@ -97,5 +97,4 @@ protected slots: void textViewRightClicked(); }; - #endif //_CHAT_H_ diff --git a/src/modules/dcc/codec.h b/src/modules/dcc/codec.h index 0e0d77cf1..315919161 100644 --- a/src/modules/dcc/codec.h +++ b/src/modules/dcc/codec.h @@ -52,6 +52,4 @@ public: virtual int decodedFrameSize(); }; - - #endif //_CODEC_H_ diff --git a/src/modules/dcc/descriptor.cpp b/src/modules/dcc/descriptor.cpp index 261500a35..859e7d33c 100644 --- a/src/modules/dcc/descriptor.cpp +++ b/src/modules/dcc/descriptor.cpp @@ -23,17 +23,14 @@ //============================================================================= #include "descriptor.h" +#include "send.h" +#include "window.h" #include "kvi_locale.h" #include "kvi_kvs_eventtriggers.h" - #include "kvi_window.h" #include "kvi_app.h" -#include "send.h" -#include "window.h" - - static unsigned int g_uNextDescriptorId = 1; // we use 0 as an invalid descriptor id static KviPointerHashTable<int,KviDccDescriptor> * g_pDescriptorDict = 0; @@ -95,7 +92,6 @@ KviDccDescriptor::KviDccDescriptor(KviConsole * pConsole) iSampleRate = 0; - m_bCreationEventTriggered = false; } @@ -147,7 +143,6 @@ void KviDccDescriptor::triggerCreationEvent() } } - KviDccDescriptor * KviDccDescriptor::find(unsigned int uId) { if(!g_pDescriptorDict)return 0; diff --git a/src/modules/dcc/descriptor.h b/src/modules/dcc/descriptor.h index ec6bee789..1cb1add97 100644 --- a/src/modules/dcc/descriptor.h +++ b/src/modules/dcc/descriptor.h @@ -26,13 +26,10 @@ #include "kvi_string.h" #include "kvi_console.h" - #include "kvi_pointerhashtable.h" - class KviDccWindow; class KviDccFileTransfer; - class KviDccDescriptor { public: @@ -123,18 +120,15 @@ public: QString szLocalFileSize; // RECVFILE: local file size (to resume), SENDFILE: file to send size bool bRecvFile; // do we have to RECEIVE the file or SEND it ? - bool bResume; // do we want to resume ? bool bNoAcks; // blind dcc send ? (do not receive nor send acknowledges) bool bIsIncomingAvatar; // It is an Incoming Avatar DCC SEND ? // DCC VOICE - KviStr szCodec; // codec name int iSampleRate; // Sample rate public: - // new interface... but should be converted to QString... QString protocol(){ return szType; }; bool isActive(){ return bActive; }; QString remoteNick(){ return szNick; }; @@ -157,7 +151,4 @@ public: bool isFileTransfer(){ return (isFileUpload() || isFileDownload()); }; }; - - - #endif //_DESCRIPTOR_H_ diff --git a/src/modules/dcc/dialogs.cpp b/src/modules/dcc/dialogs.cpp index 18f1f4f5c..d971e65b1 100644 --- a/src/modules/dcc/dialogs.cpp +++ b/src/modules/dcc/dialogs.cpp @@ -25,12 +25,14 @@ #include "kvi_iconmanager.h" #include "kvi_app.h" -#include <qlayout.h> -#include <qpushbutton.h> -#include <qlabel.h> -#include <qstringlist.h> -#include <qevent.h> -#include <qdesktopwidget.h> +#include <QLayout> +#include <QPushButton> +#include <QLabel> +#include <QStringList> +#include <QDesktopWidget> +#include <QEvent> +#include <QCloseEvent> +#include <QShowEvent> KviDccBox::KviDccBox(KviDccBroker * br,KviDccDescriptor * dcc) { @@ -55,10 +57,9 @@ KviDccAcceptBox::KviDccAcceptBox(KviDccBroker * br,KviDccDescriptor * dcc,const { QVBoxLayout * vb = new QVBoxLayout(this,4,4); QLabel * l = new QLabel(text,this); -#ifdef COMPILE_USE_QT4 l->setWordWrap(true); -#endif vb->addWidget(l); + QHBoxLayout *hb = new QHBoxLayout(4); vb->addLayout(hb,Qt::AlignCenter); QPushButton * btn = new QPushButton(__tr2qs_ctx("&Accept","dcc"),this); @@ -111,16 +112,12 @@ void KviDccAcceptBox::showEvent(QShowEvent *e) } - - KviDccRenameBox::KviDccRenameBox(KviDccBroker * br,KviDccDescriptor * dcc,const QString &text,bool bDisableResume) : QWidget(0,"dcc_rename_box") , KviDccBox(br,dcc) { QVBoxLayout * vb = new QVBoxLayout(this,4,4); QLabel * l = new QLabel(text,this); -#ifdef COMPILE_USE_QT4 l->setWordWrap(true); -#endif vb->addWidget(l); QHBoxLayout *hb = new QHBoxLayout(4); @@ -200,9 +197,6 @@ void KviDccRenameBox::cancelClicked() g_pApp->collectGarbage(this); } - - - #ifndef COMPILE_USE_STANDALONE_MOC_SOURCES #include "m_dialogs.moc" #endif //!COMPILE_USE_STANDALONE_MOC_SOURCES diff --git a/src/modules/dcc/dialogs.h b/src/modules/dcc/dialogs.h index 438b4e76a..991ff5f6c 100644 --- a/src/modules/dcc/dialogs.h +++ b/src/modules/dcc/dialogs.h @@ -22,11 +22,11 @@ // Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // +#include "broker.h" -#include <qwidget.h> #include "kvi_filedialog.h" -#include "broker.h" +#include <QWidget> class KviDccBox { @@ -41,7 +41,6 @@ public: }; - class KviDccAcceptBox : public QWidget , public KviDccBox { Q_OBJECT diff --git a/src/modules/dcc/gsmcodec.cpp b/src/modules/dcc/gsmcodec.cpp index 85f274abf..345fed909 100644 --- a/src/modules/dcc/gsmcodec.cpp +++ b/src/modules/dcc/gsmcodec.cpp @@ -25,125 +25,122 @@ #include "gsmcodec.h" #ifdef COMPILE_USE_GSM - -#include <dlfcn.h> - -#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 * 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)) + #include <dlfcn.h> + + #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 * g_pGSMCodecLibraryHandle = 0; + + bool kvi_gsm_codec_init() { - dlclose(g_pGSMCodecLibraryHandle); - g_pGSMCodecLibraryHandle = 0; - return false; + 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; } - return true; -} - -void kvi_gsm_codec_done() -{ - if(g_pGSMCodecLibraryHandle) + + void kvi_gsm_codec_done() { - dlclose(g_pGSMCodecLibraryHandle); - g_pGSMCodecLibraryHandle = 0; + if(g_pGSMCodecLibraryHandle) + { + dlclose(g_pGSMCodecLibraryHandle); + g_pGSMCodecLibraryHandle = 0; + } } -} - - - -KviDccVoiceGsmCodec::KviDccVoiceGsmCodec() -: KviDccVoiceCodec() -{ - m_pEncodeState = gsm_session_create(); - m_pDecodeState = gsm_session_create(); - m_szName = "gsm (compression 33:320)"; -} - -KviDccVoiceGsmCodec::~KviDccVoiceGsmCodec() -{ - gsm_session_destroy(m_pEncodeState); - gsm_session_destroy(m_pDecodeState); -} - -void KviDccVoiceGsmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) -{ - if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode - - unsigned char * ptr = signal->data(); - - 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; - - stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames); - - while(ptr != endPtr) + + + KviDccVoiceGsmCodec::KviDccVoiceGsmCodec() + : KviDccVoiceCodec() { - gsm_session_encode(m_pEncodeState,(short *)ptr,stream->data() + uFrameOffset); - ptr += GSM_UNPACKED_FRAME_SIZE_IN_BYTES; - uFrameOffset += GSM_PACKED_FRAME_SIZE_IN_BYTES; + m_pEncodeState = gsm_session_create(); + m_pDecodeState = gsm_session_create(); + m_szName = "gsm (compression 33:320)"; } - signal->remove(uTotalDataCompressed); -} - -void KviDccVoiceGsmCodec::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) + + KviDccVoiceGsmCodec::~KviDccVoiceGsmCodec() { - // 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; + gsm_session_destroy(m_pEncodeState); + gsm_session_destroy(m_pDecodeState); + } + + void KviDccVoiceGsmCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) + { + if(signal->size() < GSM_UNPACKED_FRAME_SIZE_IN_BYTES)return; // nothing to encode + + unsigned char * ptr = signal->data(); + + 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; + + stream->addSize(GSM_PACKED_FRAME_SIZE_IN_BYTES * uFrames); + + 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); + } + + void KviDccVoiceGsmCodec::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); + } + + int KviDccVoiceGsmCodec::encodedFrameSize() + { + return GSM_PACKED_FRAME_SIZE_IN_BYTES; + } + + int KviDccVoiceGsmCodec::decodedFrameSize() + { + return GSM_UNPACKED_FRAME_SIZE_IN_BYTES; } - stream->remove(uTotalDataDecompressed); -} - -int KviDccVoiceGsmCodec::encodedFrameSize() -{ - return GSM_PACKED_FRAME_SIZE_IN_BYTES; -} - -int KviDccVoiceGsmCodec::decodedFrameSize() -{ - return GSM_UNPACKED_FRAME_SIZE_IN_BYTES; -} #endif // COMPILE_USE_GSM diff --git a/src/modules/dcc/libkvidcc.cpp b/src/modules/dcc/libkvidcc.cpp index 26e2a4de9..1efb2a6ec 100644 --- a/src/modules/dcc/libkvidcc.cpp +++ b/src/modules/dcc/libkvidcc.cpp @@ -22,6 +22,13 @@ // //============================================================================= +#include "gsmcodec.h" +#include "broker.h" +#include "voice.h" +#include "utils.h" +#include "send.h" +#include "window.h" + #include "kvi_debug.h" #include "kvi_settings.h" #include "kvi_string.h" @@ -41,14 +48,7 @@ #include "kvi_ircconnection.h" #include "kvi_ircconnectionuserinfo.h" -#include "gsmcodec.h" -#include "broker.h" -#include "voice.h" -#include "utils.h" -#include "send.h" -#include "window.h" - -#include <qfileinfo.h> +#include <QFileInfo> #ifdef COMPILE_ON_WINDOWS // Ugly Windoze compiler... @@ -2754,8 +2754,8 @@ static bool dcc_module_can_unload(KviModule *m) } KVIRC_MODULE( - "Dcc", - "1.0.0", + "DCC", + "4.0.0", "Copyright (C) 2000-2004:\n" \ " Szymon Stefanek (pragma at kvirc dot net)\n", "DCC extension for KVIrc\n", diff --git a/src/modules/dcc/marshal.cpp b/src/modules/dcc/marshal.cpp index add48e9bc..c67d3d010 100644 --- a/src/modules/dcc/marshal.cpp +++ b/src/modules/dcc/marshal.cpp @@ -31,12 +31,9 @@ #include "kvi_socket.h" #include "kvi_fileutils.h" - #include <stdlib.h> //for exit() - - KviDccMarshal::KviDccMarshal(KviDccMarshalOutputContext * ctx) : QObject(0,"dcc_marshal") { @@ -160,7 +157,6 @@ void KviDccMarshal::doListen() return; } - #ifndef COMPILE_IPV6_SUPPORT if(m_bIpV6) { @@ -556,7 +552,6 @@ void KviDccMarshal::snActivated(int) emit connected(); } - void KviDccMarshal::doSSLHandshake(int) { #ifdef COMPILE_SSL_SUPPORT diff --git a/src/modules/dcc/marshal.h b/src/modules/dcc/marshal.h index 542222d6b..b7d19e7fe 100644 --- a/src/modules/dcc/marshal.h +++ b/src/modules/dcc/marshal.h @@ -24,18 +24,19 @@ #include "kvi_string.h" #include "kvi_sockettype.h" -#include <qobject.h> -#include <qsocketnotifier.h> -#include <qtimer.h> #include "kvi_inttypes.h" +#include <QObject> +#include <QSocketNotifier> +#include <QTimer> + class KviWindow; +class KviDccMarshal; #ifdef COMPILE_SSL_SUPPORT #include "kvi_sslmaster.h" #endif -class KviDccMarshal; class KviDccMarshalOutputContext { diff --git a/src/modules/dcc/requests.cpp b/src/modules/dcc/requests.cpp index db8fb3e72..080aa9a7a 100644 --- a/src/modules/dcc/requests.cpp +++ b/src/modules/dcc/requests.cpp @@ -23,6 +23,13 @@ //============================================================================= #define _KVI_DEBUG_CHECK_RANGE_ + +#include "gsmcodec.h" +#include "broker.h" +#include "voice.h" +#include "utils.h" +#include "send.h" + #include "kvi_debug.h" #include "kvi_settings.h" #include "kvi_string.h" @@ -34,7 +41,6 @@ #include "kvi_netutils.h" #include "kvi_frame.h" #include "kvi_console.h" - #include "kvi_error.h" #include "kvi_options.h" #include "kvi_defaults.h" @@ -44,13 +50,7 @@ #include "kvi_ircconnection.h" #include "kvi_ircconnectionuserinfo.h" -#include "gsmcodec.h" -#include "broker.h" -#include "voice.h" -#include "utils.h" -#include "send.h" - -#include <qfileinfo.h> +#include <QFileInfo> #ifdef COMPILE_ON_WINDOWS // Ugly Windoze compiler... @@ -146,7 +146,6 @@ static void dcc_module_set_dcc_type(KviDccDescriptor * d,const char * szBaseType if(d->bIsTdcc)d->szType.prepend('T'); } - static bool dcc_module_normalize_target_data(KviDccRequest * dcc,KviStr &ipaddr,KviStr &port) { if(!port.isUnsignedNum()) @@ -522,7 +521,7 @@ static void dccModuleParseDccAccept(KviDccRequest *dcc) // DCC ACCEPT <filename> 0 <resumesize> <tag> if(!g_pDccBroker->handleResumeAccepted(dcc->szParam1.ptr(),dcc->szParam2.ptr(),dcc->szParam4.ptr())) { -//#warning "IF KviOption_boolReplyCtcpErrmsgOnInvalidAccept..." + //#warning "IF KviOption_boolReplyCtcpErrmsgOnInvalidAccept..." if(!dcc->ctcpMsg->msg->haltOutput()) { KviStr szError(KviStr::Format,__tr2qs_ctx("Can't proceed with DCC RECV: Transfer not initiated for file %s on port %s","dcc"),dcc->szParam1.ptr(),dcc->szParam2.ptr()); @@ -558,7 +557,7 @@ static void dccModuleParseDccResume(KviDccRequest *dcc) if(!g_pDccBroker->handleResumeRequest(dcc,dcc->szParam1.ptr(),dcc->szParam2.ptr(),filePos,dcc->szParam4.ptr())) { -//#warning "IF KviOption_boolReplyCtcpErrmsgOnInvalidResume..." + //#warning "IF KviOption_boolReplyCtcpErrmsgOnInvalidResume..." if(!dcc->ctcpMsg->msg->haltOutput()) { KviStr szError(KviStr::Format, @@ -754,7 +753,7 @@ static void dccModuleParseDccRSend(KviDccRequest *dcc) } #endif //!COMPILE_SSL_SUPPORT -//#warning "When behind a firewall, we should reply an error message and avoid setting up the listening connection" + //#warning "When behind a firewall, we should reply an error message and avoid setting up the listening connection" KviDccDescriptor * d = new KviDccDescriptor(dcc->pConsole); d->szNick = dcc->ctcpMsg->pSource->nick(); @@ -853,11 +852,11 @@ static void dccModuleParseDccGet(KviDccRequest *dcc) return; } -//#warning "IF NOT IGNORE DCC GET!" - -//#warning "CREATE IT MINIMIZED ETC..." -//#warning "MAYBE USE A DIALOG TO ACCEPT THE REQUEST ?" -//#warning "DO NOT ACCEPT /etc/* requests..." + //#warning "IF NOT IGNORE DCC GET!" + + //#warning "CREATE IT MINIMIZED ETC..." + //#warning "MAYBE USE A DIALOG TO ACCEPT THE REQUEST ?" + //#warning "DO NOT ACCEPT /etc/* requests..." if(KVI_OPTION_BOOL(KviOption_boolCantAcceptIncomingDccConnections)) { @@ -919,7 +918,7 @@ static void dccModuleParseDccGet(KviDccRequest *dcc) d->szListenIp = "0.0.0.0"; } else d->szListenIp=QString(tmp); -//#warning "DO STH WITH THIS PORT (HOW TO SPECIFY IT ?)" + //#warning "DO STH WITH THIS PORT (HOW TO SPECIFY IT ?)" d->szListenPort = "0"; // any port is ok if(KVI_OPTION_BOOL(KviOption_boolDccSendFakeAddressByDefault)) @@ -1078,15 +1077,12 @@ static void dccModuleParseDccCanvas(KviDccRequest *dcc) #endif } - static void dccModuleParseDccList(KviDccRequest *dcc) { // DCC LIST <mask> <ipaddr> <port> // FIXME! } - - typedef void (*dccParseProc)(KviDccRequest *); typedef struct _dccParseProcEntry { diff --git a/src/modules/dcc/send.cpp b/src/modules/dcc/send.cpp index 82315fe7b..8a4401c88 100644 --- a/src/modules/dcc/send.cpp +++ b/src/modules/dcc/send.cpp @@ -22,19 +22,14 @@ // //============================================================================= +#define _KVI_DEBUG_CHECK_RANGE_ + #include "send.h" #include "broker.h" #include "marshal.h" #include "broker.h" #include "window.h" -#include "kvi_styled_controls.h" - -#ifdef COMPILE_ON_WINDOWS - // Ugly Windoze compiler... - #include "dialogs.h" -#endif -#define _KVI_DEBUG_CHECK_RANGE_ #include "kvi_debug.h" #include "kvi_app.h" #include "kvi_options.h" @@ -50,7 +45,6 @@ #include "kvi_memmove.h" #include "kvi_thread.h" #include "kvi_ircsocket.h" - #include "kvi_mediatype.h" #include "kvi_socket.h" #include "kvi_kvs_eventtriggers.h" @@ -59,16 +53,22 @@ #include "kvi_ircconnectionuserinfo.h" #include "kvi_sparser.h" #include "kvi_kvs_script.h" +#include "kvi_styled_controls.h" -#include <qevent.h> -#include <qfile.h> -#include <qpainter.h> -#include <qdatetime.h> +#ifdef COMPILE_ON_WINDOWS + // Ugly Windoze compiler... + #include "dialogs.h" +#endif + +#include <QFile> +#include <QPainter> +#include <QDateTime> #include <qglobal.h> -#include <qcheckbox.h> -#include <qspinbox.h> -#include <qlayout.h> -#include <qpushbutton.h> +#include <QCheckBox> +#include <QSpinBox> +#include <QLayout> +#include <QPushButton> +#include <QEvent> #define INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_MSECS 3000 #define INSTANT_BANDWIDTH_CHECK_INTERVAL_IN_SECS 3 @@ -930,7 +930,6 @@ void KviDccFileTransfer::abort() displayUpdate(); } - void KviDccFileTransfer::fillContextPopup(KviTalPopupMenu * m,int column) { m->insertItem(__tr2qs_ctx("Configure Bandwidth...","dcc"),this,SLOT(configureBandwidth())); @@ -975,6 +974,7 @@ void KviDccFileTransfer::retryTDCC() QString szCommand = "dcc.send -r=$console($dcc.irccontext(" + szId + ")) -t " + szRemoteNick + " " + "\"" + szFileName + "\""; KviKvsScript::run(szCommand,g_pActiveWindow); } + void KviDccFileTransfer::retryRevDCC() { abort(); @@ -1340,7 +1340,6 @@ int KviDccFileTransfer::displayHeight(int iLineSpacing) QString KviDccFileTransfer::tipText() { - QString s; s = QString("<table><tr><td bgcolor=\"#000000\"><font color=\"#FFFFFF\"><b>DCC %1 (ID %2)</b></font></td></tr>").arg(m_szDccType.ptr()).arg(id()); @@ -1403,7 +1402,6 @@ KviDccFileTransfer * KviDccFileTransfer::nonFailedTransferWithLocalFileName(cons return 0; } - unsigned int KviDccFileTransfer::runningTransfersCount() { if(!g_pDccFileTransfers)return 0; @@ -1463,7 +1461,6 @@ void KviDccFileTransfer::addToTransferLog(const QString &s) m_szTransferLog += "<br>"; } - void KviDccFileTransfer::connectionInProgress() { if(m_pDescriptor->bActive) @@ -1583,9 +1580,6 @@ void KviDccFileTransfer::sslError(const char * msg) #endif } - - - bool KviDccFileTransfer::event(QEvent *e) { if(e->type() == KVI_THREAD_EVENT) @@ -1818,10 +1812,6 @@ bool KviDccFileTransfer::doResume(const char * filename,const char * port,unsign } - - - - KviDccFileTransferBandwidthDialog::KviDccFileTransferBandwidthDialog(QWidget * pParent,KviDccFileTransfer * t) : QDialog(pParent) { @@ -1893,7 +1883,6 @@ void KviDccFileTransferBandwidthDialog::closeEvent(QCloseEvent * e) } - #ifndef COMPILE_USE_STANDALONE_MOC_SOURCES #include "m_send.moc" #endif //!COMPILE_USE_STANDALONE_MOC_SOURCES diff --git a/src/modules/dcc/send.h b/src/modules/dcc/send.h index c083ce4af..4a4d7cc3d 100644 --- a/src/modules/dcc/send.h +++ b/src/modules/dcc/send.h @@ -24,27 +24,32 @@ // //============================================================================= -#include "kvi_window.h" -#include "kvi_string.h" - #include "descriptor.h" #include "window.h" #include "thread.h" +#include "kvi_window.h" +#include "kvi_string.h" #include "kvi_sockettype.h" - #include "kvi_pointerlist.h" -#include <qlabel.h> -#include <qprogressbar.h> +#include "kvi_filetransfer.h" +#include "kvi_time.h" +#include "kvi_styled_controls.h" #include "kvi_tal_popupmenu.h" #include "kvi_tal_hbox.h" #include "kvi_tal_vbox.h" -#include <qfile.h> -#include <qdialog.h> -#include "kvi_filetransfer.h" -#include "kvi_time.h" +#include <QLabel> +#include <QProgressBar> +#include <QFile> +#include <QDialog> +class QSpinBox; +class QTimer; +class QPainter; +class KviDccFileTransfer; +class KviDccMarshal; +class KviTalPopupMenu; typedef struct _KviDccSendThreadOptions { @@ -142,11 +147,6 @@ protected: virtual void run(); }; -class KviDccFileTransfer; -class QSpinBox; -class QTimer; - -#include "kvi_styled_controls.h" class KviDccFileTransferBandwidthDialog : public QDialog { @@ -166,10 +166,6 @@ protected slots: }; -class KviDccMarshal; -class QPainter; -class KviTalPopupMenu; - class KviDccFileTransfer : public KviFileTransfer, public KviDccMarshalOutputContext { enum GeneralStatus { Connecting , Transferring , Success , Failure }; diff --git a/src/modules/dcc/thread.cpp b/src/modules/dcc/thread.cpp index 622fb6130..1d583c14d 100644 --- a/src/modules/dcc/thread.cpp +++ b/src/modules/dcc/thread.cpp @@ -20,8 +20,10 @@ // Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // -#include "thread.h" #define _KVI_DEBUG_CHECK_RANGE_ + +#include "thread.h" + #include "kvi_debug.h" #include "kvi_window.h" #include "kvi_error.h" @@ -29,6 +31,7 @@ #include "kvi_malloc.h" #include "kvi_netutils.h" #include "kvi_socket.h" + #ifdef COMPILE_SSL_SUPPORT #include "kvi_sslmaster.h" #endif diff --git a/src/modules/dcc/thread.h b/src/modules/dcc/thread.h index 91b46f314..f7e8132a3 100644 --- a/src/modules/dcc/thread.h +++ b/src/modules/dcc/thread.h @@ -25,10 +25,9 @@ #include "kvi_settings.h" #include "kvi_thread.h" #include "kvi_sockettype.h" - #include "kvi_pointerlist.h" -#include <qobject.h> +#include <QObject> #ifdef COMPILE_SSL_SUPPORT #include "kvi_ssl.h" diff --git a/src/modules/dcc/utils.cpp b/src/modules/dcc/utils.cpp index 786952563..84c9af0c2 100644 --- a/src/modules/dcc/utils.cpp +++ b/src/modules/dcc/utils.cpp @@ -99,7 +99,6 @@ bool dcc_module_get_listen_ip_address(KviCommand *c,KviConsole * pConsole,QStrin } */ - bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsole * pConsole,QString &szListenIp) { // @@ -166,4 +165,3 @@ bool dcc_kvs_get_listen_ip_address(KviKvsModuleCommandCall *c,KviConsole * pCons return true; } - diff --git a/src/modules/dcc/voice.cpp b/src/modules/dcc/voice.cpp index af0c46f44..96ab3dd54 100644 --- a/src/modules/dcc/voice.cpp +++ b/src/modules/dcc/voice.cpp @@ -23,6 +23,8 @@ #include "voice.h" #include "marshal.h" #include "broker.h" +#include "adpcmcodec.h" +#include "gsmcodec.h" #include "kvi_settings.h" #include "kvi_iconmanager.h" @@ -36,15 +38,12 @@ #include "kvi_malloc.h" #include "kvi_socket.h" #include "kvi_ircconnection.h" - -#include "adpcmcodec.h" -#include "gsmcodec.h" - -#include <qframe.h> -#include <qsplitter.h> #include "kvi_tal_vbox.h" -#include <qslider.h> -#include <qtooltip.h> + +#include <QFrame> +#include <QSplitter> +#include <QSlider> +#include <QToolTip> #ifndef COMPILE_ON_WINDOWS #include <sys/time.h> @@ -52,10 +51,9 @@ #include <unistd.h> #include <errno.h> #include <fcntl.h> -//#include "kvi_error.h" - -#include <sys/stat.h> // for open() -#include <sys/ioctl.h> // for ioctl() + //#include "kvi_error.h" + #include <sys/stat.h> // for open() + #include <sys/ioctl.h> // for ioctl() #endif //!COMPILE_ON_WIDNOWS extern KviDccBroker * g_pDccBroker; @@ -142,7 +140,6 @@ KviDccVoiceThread::~KviDccVoiceThread() #endif } - bool KviDccVoiceThread::checkSoundcard() { #ifdef COMPILE_DISABLE_DCC_VOICE @@ -280,8 +277,6 @@ bool KviDccVoiceThread::openSoundcardWithDuplexOption(int openMode,int failMode) return (m_soundFdMode != failMode); } - - return true; #else return false; @@ -300,8 +295,6 @@ void KviDccVoiceThread::closeSoundcard() #endif } - - bool KviDccVoiceThread::readWriteStep() { #ifndef COMPILE_DISABLE_DCC_VOICE @@ -644,8 +637,6 @@ exit_dcc: } - - KviDccVoice::KviDccVoice(KviFrame *pFrm,KviDccDescriptor * dcc,const char * name) : KviDccWindow(KVI_WINDOW_TYPE_DCCVOICE,pFrm,name,dcc) { @@ -682,7 +673,7 @@ KviDccVoice::KviDccVoice(KviFrame *pFrm,KviDccDescriptor * 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->setValue(getMixerVolume()); -/* Update the tooltip */ + /* Update the tooltip */ setMixerVolume(m_pVolumeSlider->value()); m_pVolumeSlider->setMaximumWidth(16); m_pVolumeSlider->setMaximumHeight(2*m_pPlayingLabel->height()); @@ -691,17 +682,11 @@ KviDccVoice::KviDccVoice(KviFrame *pFrm,KviDccDescriptor * dcc,const char * name m_pTalkButton = new QToolButton(m_pHBox); m_pTalkButton->setEnabled(false); m_pTalkButton->setToggleButton(true); -#if QT_VERSION >= 300 QIconSet iset; iset.setPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED)),QIconSet::Large,QIconSet::Normal,QIconSet::Off); iset.setPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTED)),QIconSet::Large,QIconSet::Normal,QIconSet::On); m_pTalkButton->setIconSet(iset); -#else - m_pTalkButton->setOffIconSet(*(g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED))); - m_pTalkButton->setOnIconSet(*(g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTED))); -#endif m_pTalkButton->setUsesBigPixmap(true); - connect(m_pTalkButton,SIGNAL(toggled(bool)),this,SLOT(startOrStopTalking(bool))); m_pHBox->setStretchFactor(vbox,1); diff --git a/src/modules/dcc/voice.h b/src/modules/dcc/voice.h index fcd8b5978..944551dd5 100644 --- a/src/modules/dcc/voice.h +++ b/src/modules/dcc/voice.h @@ -22,20 +22,22 @@ // Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // -#include "kvi_window.h" - -#include "kvi_databuffer.h" -#include "kvi_sockettype.h" - #include "codec.h" #include "descriptor.h" #include "thread.h" #include "window.h" +#include "kvi_window.h" +#include "kvi_databuffer.h" +#include "kvi_sockettype.h" #include "kvi_tal_hbox.h" -#include <qlabel.h> -#include <qtoolbutton.h> -#include <qtimer.h> + +#include <QLabel> +#include <QToolButton> +#include <QTimer> + +class QSlider; +class KviDccMarshal; #ifndef _DCC_VOICE_CPP_ extern bool kvi_dcc_voice_is_valid_codec(const char * codecName); @@ -97,8 +99,6 @@ protected: virtual void run(); }; -class KviDccMarshal; -class QSlider; class KviDccVoice : public KviDccWindow { diff --git a/src/modules/dcc/window.cpp b/src/modules/dcc/window.cpp index 6f9a36b60..fa64b2ad2 100644 --- a/src/modules/dcc/window.cpp +++ b/src/modules/dcc/window.cpp @@ -21,7 +21,8 @@ // #include "window.h" -#include "kvi_tal_hbox.h" + +#include "kvi_tal_hbox.h" KviDccWindow::KviDccWindow(int type,KviFrame * lpFrm,const char * name,KviDccDescriptor * d) : KviWindow(type,lpFrm,name) diff --git a/src/modules/dcc/window.h b/src/modules/dcc/window.h index 4a6a60499..16308e327 100644 --- a/src/modules/dcc/window.h +++ b/src/modules/dcc/window.h @@ -22,11 +22,11 @@ // Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // -#include "kvi_window.h" - #include "descriptor.h" #include "marshal.h" +#include "kvi_window.h" + class KviDccWindow : public KviWindow , public KviDccMarshalOutputContext { Q_OBJECT @@ -44,6 +44,4 @@ public: virtual const char * dccMarshalOutputContextString(); }; - - #endif //_WINDOW_H_ |
