diff options
| author | 2008-06-27 16:53:23 +0000 | |
|---|---|---|
| committer | 2008-06-27 16:53:23 +0000 | |
| commit | 998753e7d890d9ffdf2236e78797e3727d4bef79 (patch) | |
| tree | 7aac843788333b72a7c8d4e0497b5117d91c2bd2 /src/modules | |
| parent | Fixed the order of class registration in the objects module (diff) | |
| download | KVIrc-998753e7d890d9ffdf2236e78797e3727d4bef79.tar.gz KVIrc-998753e7d890d9ffdf2236e78797e3727d4bef79.tar.bz2 KVIrc-998753e7d890d9ffdf2236e78797e3727d4bef79.zip | |
added kvi_tal_tablewidget;
ported filetrandferwindow from old tal_listview to new tal_tablewidget (wip)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1962 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/dcc/send.cpp | 42 | ||||
| -rw-r--r-- | src/modules/dcc/send.h | 2 | ||||
| -rw-r--r-- | src/modules/filetransferwindow/filetransferwindow.cpp | 217 | ||||
| -rw-r--r-- | src/modules/filetransferwindow/filetransferwindow.h | 52 | ||||
| -rw-r--r-- | src/modules/http/httpfiletransfer.cpp | 39 | ||||
| -rw-r--r-- | src/modules/http/httpfiletransfer.h | 2 |
6 files changed, 214 insertions, 140 deletions
diff --git a/src/modules/dcc/send.cpp b/src/modules/dcc/send.cpp index 3d425fd76..04f0469ba 100644 --- a/src/modules/dcc/send.cpp +++ b/src/modules/dcc/send.cpp @@ -1102,9 +1102,9 @@ unsigned int KviDccFileTransfer::transferredBytes() return uTransferred; } -void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int height) +void KviDccFileTransfer::displayPaint(QPainter * p,int column, QRect rect) { - + int width = rect.width(), height = rect.height(); QString txt; bool bIsTerminated = ((m_eGeneralStatus == Success) || (m_eGeneralStatus == Failure)); @@ -1123,7 +1123,7 @@ void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int heig case Success: xoffset = 96; break; case Failure: xoffset = 144; break; } - p->drawPixmap(3,3,*g_pDccFileTransferIcon,xoffset,yoffset,48,64); + p->drawPixmap(rect.left() + 3,rect.top() + 3,*g_pDccFileTransferIcon,xoffset,yoffset,48,64); } break; case COLUMN_FILEINFO: @@ -1146,31 +1146,31 @@ void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int heig KviStr szRemote(KviStr::Format,"dcc://%s@%s:%s/%s",m_pDescriptor->szNick.toUtf8().data(),m_pDescriptor->szIp.toUtf8().data(),m_pDescriptor->szPort.toUtf8().data(), m_pDescriptor->szFileName.toUtf8().data()); - p->drawText(4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft, + p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft, m_pDescriptor->bRecvFile ? szRemote.ptr() : m_pDescriptor->szLocalFileName.toUtf8().data()); iY += iLineSpacing; - p->drawText(4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft, + p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft, m_pDescriptor->bRecvFile ? m_pDescriptor->szLocalFileName.toUtf8().data() : szRemote.ptr()); iY += iLineSpacing; p->setPen(Qt::darkGray); - p->drawText(4,4,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szFrom); - p->drawText(4,4 + iLineSpacing,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szTo); + p->drawText(rect.left() + 4,4,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szFrom); + p->drawText(rect.left() + 4,4 + iLineSpacing,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szTo); p->setPen(QColor(180,180,200)); iLineSpacing += 2; - p->drawRect(4,height - (iLineSpacing + 4),width - 8,iLineSpacing); - p->fillRect(5,height - (iLineSpacing + 3),width - 10,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + 4,height - (iLineSpacing + 4),width - 8,iLineSpacing); + p->fillRect(rect.left() + 5,height - (iLineSpacing + 3),width - 10,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); p->setPen(Qt::black); - p->drawText(7,height - (iLineSpacing + 4),width - 14,iLineSpacing,Qt::AlignVCenter | Qt::AlignLeft,m_szStatusString); + p->drawText(rect.left() + 7,height - (iLineSpacing + 4),width - 14,iLineSpacing,Qt::AlignVCenter | Qt::AlignLeft,m_szStatusString); } break; @@ -1211,7 +1211,7 @@ void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int heig } p->setPen(bIsTerminated ? Qt::lightGray : QColor(210,210,240)); - p->drawRect(4,4,iW,12); + p->drawRect(rect.left() + 4, rect.top() + 4,iW,12); iW -= 2; @@ -1232,15 +1232,15 @@ void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int heig double dPerc2 = (double)(((double)iAckedBytes) * 100.0) / (double)m_uTotalFileSize; int iL2 = (int) ((((double)iW) * dPerc2) / 100.0); int iW2 = iL1 - iL2; - if(iW2 > 0)p->fillRect(5 + iL2,5,iW2,10,bIsTerminated ? QColor(150,130,110) : QColor(220,170,100)); - p->fillRect(5,5,iL2,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); + if(iW2 > 0)p->fillRect(rect.left() + 5 + iL2,rect.top() + 5,iW2,10,bIsTerminated ? QColor(150,130,110) : QColor(220,170,100)); + p->fillRect(rect.left() + 5,rect.top() + 5,iL2,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(iAckedBytes)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc2,0,'f',2); } else { // we are receiving a file or not sending acks double dPerc = (double)(((double)uTransferred) * 100.0) / (double)m_uTotalFileSize; int iL = (int) ((((double)iW) * dPerc) / 100.0); - p->fillRect(5,5,iL,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); + p->fillRect(rect.left() + 5,rect.top() + 5,iL,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(uTransferred)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc,0,'f',2); } @@ -1251,7 +1251,7 @@ void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int heig p->setPen(Qt::black); - p->drawText(4,19,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,txt); + p->drawText(rect.left() + 4,rect.top() + 19,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,txt); int iLeftHalf = (iW - 2) / 2; int iRightHalf = iW - (iLeftHalf + 1); @@ -1293,10 +1293,10 @@ void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int heig int iDaH = height - (iLineSpacing + 4); p->setPen(QColor(180,180,200)); - p->drawRect(4,iDaH,iLeftHalf,iLineSpacing); - p->fillRect(5,iDaH + 1,iLeftHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + 4,rect.top() + iDaH,iLeftHalf,iLineSpacing); + p->fillRect(rect.left() + 5,rect.top() + iDaH + 1,iLeftHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(6,iDaH,iLeftHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); + p->drawText(rect.left() + 6,rect.top() + iDaH,iLeftHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); if(bIsTerminated) { @@ -1320,10 +1320,10 @@ void KviDccFileTransfer::displayPaint(QPainter * p,int column,int width,int heig } p->setPen(QColor(180,180,200)); - p->drawRect(width - (4 + iRightHalf),iDaH,iRightHalf,iLineSpacing); - p->fillRect(width - (3 + iRightHalf),iDaH + 1,iRightHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + width - (4 + iRightHalf),rect.top() + iDaH,iRightHalf,iLineSpacing); + p->fillRect(rect.left() + width - (3 + iRightHalf),rect.top() + iDaH + 1,iRightHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(width - (2 + iRightHalf),iDaH,iRightHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); + p->drawText(rect.left() + width - (2 + iRightHalf),rect.top() + iDaH,iRightHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); } break; diff --git a/src/modules/dcc/send.h b/src/modules/dcc/send.h index 4a4d7cc3d..b783c8512 100644 --- a/src/modules/dcc/send.h +++ b/src/modules/dcc/send.h @@ -214,7 +214,7 @@ public: virtual KviWindow * dccMarshalOutputWindow(); virtual const char * dccMarshalOutputContextString(); - virtual void displayPaint(QPainter * p,int column,int width,int height); + virtual void displayPaint(QPainter * p,int column, QRect rect); virtual int displayHeight(int iLineSpacing); virtual void fillContextPopup(KviTalPopupMenu * m,int column); virtual void fillStatusString(QString &szBuffer); diff --git a/src/modules/filetransferwindow/filetransferwindow.cpp b/src/modules/filetransferwindow/filetransferwindow.cpp index a9f0f3a61..a026e2d38 100644 --- a/src/modules/filetransferwindow/filetransferwindow.cpp +++ b/src/modules/filetransferwindow/filetransferwindow.cpp @@ -50,8 +50,7 @@ #include <QEvent> #include <QKeyEvent> -// FIXME: Qt4 #include <QHeaderView> -#include <q3header.h> +#include <QHeaderView> #ifdef COMPILE_KDE_SUPPORT #include <kurl.h> @@ -61,19 +60,31 @@ #include <kiconloader.h> #endif //COMPILE_KDE_SUPPORT +#ifdef COMPILE_PSEUDO_TRANSPARENCY + extern QPixmap * g_pShadedChildGlobalDesktopBackground; +#endif + extern KviFileTransferWindow * g_pFileTransferWindow; -KviFileTransferItem::KviFileTransferItem(KviTalListView * v,KviFileTransfer * t) -: KviTalListViewItem(v) +KviFileTransferItem::KviFileTransferItem(KviFileTransferWidget * v,KviFileTransfer * t) +: KviTalTableWidgetItem(v) { m_pTransfer = t; m_pTransfer->setDisplayItem(this); + + //create items for the second and the third column + col1Item = new KviTalTableWidgetItem(v, row(), 1); + col2Item = new KviTalTableWidgetItem(v, row(), 2); + //FIXME fixed row height + tableWidget()->setRowHeight( row(), 68 ); } KviFileTransferItem::~KviFileTransferItem() { m_pTransfer->setDisplayItem(0); + delete col1Item; + delete col2Item; } QString KviFileTransferItem::key(int column,bool bAcending) const @@ -90,55 +101,62 @@ QString KviFileTransferItem::key(int column,bool bAcending) const return ret; } -void KviFileTransferItem::paintCell(QPainter * p,const QColorGroup &cg,int column,int width,int align) +void KviFileTransferWidget::paintEvent(QPaintEvent * event) { - QPainter * newP; - QPixmap * pix = 0; - if(p->device() == listView()->viewport()) + QPainter *p = new QPainter(viewport()); + QStyleOptionViewItem option = viewOptions(); + QRect rect = event->rect(); + KviFileTransferItem* item; + int r, c; + +#ifdef COMPILE_PSEUDO_TRANSPARENCY + if(g_pShadedChildGlobalDesktopBackground) { - // ops.. there is no double buffering active ? - // we'll do it then - pix = g_pFileTransferWindow->memPixmap(); - if((pix->width() < width) || (pix->height() < height())) - { - pix->resize(width,height()); - } else { - if((pix->width() > 500) || (pix->height() > 110)) - { - if((pix->width() * pix->height()) > (width * height() * 4)) - { - // this is getting too big - pix->resize(width,height()); - } - } - } - newP = new QPainter(pix); + QPoint pnt = viewport()->mapToGlobal(rect.topLeft()); + p->drawTiledPixmap(rect,*g_pShadedChildGlobalDesktopBackground,pnt); } else { - newP = p; +#endif + p->fillRect(rect,KVI_OPTION_COLOR(KviOption_colorTreeTaskBarBackground)); +#ifdef COMPILE_PSEUDO_TRANSPARENCY } +#endif + delete p; + + //call paint on all childrens + KviTalTableWidget::paintEvent(event); +} - p->setFont(listView()->font()); +void KviFileTransferItemDelegate::paint(QPainter * p, const QStyleOptionViewItem & option, const QModelIndex & index) const +{ + //FIXME not exactly model/view coding style.. but we need to access data on the item by now + KviFileTransferWidget* tableWidget = (KviFileTransferWidget*)parent(); + KviFileTransferItem* item = (KviFileTransferItem*) tableWidget->itemFromIndex(index); + KviFileTransfer* transfer = ((KviFileTransferItem*)tableWidget->item(item->row(), 0))->transfer(); - newP->setPen(isSelected() ? cg.highlight() : cg.base()); - newP->drawRect(0,0,width,height()); - newP->setPen(m_pTransfer->active() ? QColor(180,180,180) : QColor(200,200,200)); - newP->drawRect(1,1,width - 2,height() - 2); - newP->fillRect(2,2,width - 4,height() - 4,m_pTransfer->active() ? QColor(240,240,240) : QColor(225,225,225)); + p->setFont(option.font); - m_pTransfer->displayPaint(newP,column,width,height()); + p->setPen(option.state & QStyle::State_Selected ? option.palette.highlight() : option.palette.base()); - if(newP != p) - { - p->drawPixmap(0,0,*pix,0,0,width,height()); - delete newP; - } + p->drawRect(option.rect); + p->setPen(transfer->active() ? QColor(180,180,180) : QColor(200,200,200)); + + p->drawRect(option.rect.left() + 1, option.rect.top() + 1, option.rect.width() - 2,option.rect.height() - 2); + p->fillRect(option.rect.left() + 2, option.rect.top() + 2, option.rect.width() - 4, option.rect.height() - 4,transfer->active() ? QColor(240,240,240) : QColor(225,225,225)); + + transfer->displayPaint(p, index.column(), option.rect); } +QSize KviFileTransferItemDelegate::sizeHint( const QStyleOptionViewItem & option, const QModelIndex & index ) const +{ + // FIXME fixed width + return QSize(((KviFileTransferWidget*)parent())->viewport()->size().width(), 68); +} +/* void KviFileTransferItem::setHeight(int h) { - KviTalListViewItem::setHeight(m_pTransfer->displayHeight(g_pFileTransferWindow->lineSpacing())); + KviTalTableWidgetItem::setHeight(m_pTransfer->displayHeight(g_pFileTransferWindow->lineSpacing())); } - +*/ KviFileTransferWindow::KviFileTransferWindow(KviModuleExtensionDescriptor * d,KviFrame * lpFrm) : KviWindow(KVI_WINDOW_TYPE_TOOL,lpFrm,"file transfer window",0) , KviModuleExtension(d) @@ -159,30 +177,52 @@ KviFileTransferWindow::KviFileTransferWindow(KviModuleExtensionDescriptor * d,Kv m_pSplitter = new QSplitter(Qt::Horizontal,this,"splitter"); m_pVertSplitter = new QSplitter(Qt::Vertical,m_pSplitter,"vsplitter"); - m_pListView = new KviTalListView(m_pVertSplitter); - //m_pListView->header()->hide(); - m_pListView->setAllColumnsShowFocus(true); - m_pListView->addColumn(__tr2qs_ctx("Type","filetransferwindow"),56); - m_pListView->addColumn(__tr2qs_ctx("Information","filetransferwindow"),350); - m_pListView->addColumn(__tr2qs_ctx("Progress","filetransferwindow"),350); + m_pTableWidget = new KviFileTransferWidget(m_pVertSplitter); + + //ad-hoc itemdelegate for this view + m_pItemDelegate = new KviFileTransferItemDelegate(m_pTableWidget); + m_pTableWidget->setItemDelegate(m_pItemDelegate); + + m_pTableWidget->verticalHeader()->hide(); + m_pTableWidget->setShowGrid(false); + + m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); + m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection); + + m_pTableWidget->setColumnCount(3); - KviDynamicToolTip * tp = new KviDynamicToolTip(m_pListView->viewport()); - connect(tp,SIGNAL(tipRequest(KviDynamicToolTip *,const QPoint &)),this,SLOT(tipRequest(KviDynamicToolTip *,const QPoint &))); + QStringList colHeaders; + colHeaders.append(__tr2qs_ctx("Type","filetransferwindow")); + colHeaders.append(__tr2qs_ctx("Information","filetransferwindow")); + colHeaders.append(__tr2qs_ctx("Progress","filetransferwindow")); + m_pTableWidget->setHorizontalHeaderLabels(colHeaders); + m_pTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Interactive); + m_pTableWidget->horizontalHeader()->setMinimumSectionSize(50); - //m_pListView->setFocusPolicy(NoFocus); - //m_pListView->viewport()->setFocusPolicy(NoFocus); + //default column widths + m_pTableWidget->setColumnWidth(0, 68); + m_pTableWidget->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed); + m_pTableWidget->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch); + m_pTableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch); - //connect(m_pListView,SIGNAL(rightButtonPressed(KviTalListViewItem *,const QPoint &,int)), - // this,SLOT(showHostPopup(KviTalListViewItem *,const QPoint &,int))); + KviDynamicToolTip * tp = new KviDynamicToolTip(m_pTableWidget->viewport()); + //TODO + //connect(tp,SIGNAL(tipRequest(KviDynamicToolTip *,const QPoint &)),this,SLOT(tipRequest(KviDynamicToolTip *,const QPoint &))); + + //m_pTableWidget->setFocusPolicy(NoFocus); + //m_pTableWidget->viewport()->setFocusPolicy(NoFocus); + + //connect(m_pTableWidget,SIGNAL(rightButtonPressed(KviTalTableWidgetItem *,const QPoint &,int)), + // this,SLOT(showHostPopup(KviTalTableWidgetItem *,const QPoint &,int))); QFontMetrics fm(font()); m_iLineSpacing = fm.lineSpacing(); m_pIrcView = new KviIrcView(m_pVertSplitter,lpFrm,this); - m_pListView->installEventFilter(this); - connect(m_pListView,SIGNAL(rightButtonPressed(KviTalListViewItem *,const QPoint &,int)),this,SLOT(rightButtonPressed(KviTalListViewItem *,const QPoint &,int))); - connect(m_pListView,SIGNAL(doubleClicked(KviTalListViewItem *,const QPoint &,int)),this,SLOT(doubleClicked(KviTalListViewItem *,const QPoint &,int))); + m_pTableWidget->installEventFilter(this); + connect(m_pTableWidget,SIGNAL(rightButtonPressed(KviTalTableWidgetItem *,const QPoint &,int)),this,SLOT(rightButtonPressed(KviTalTableWidgetItem *,const QPoint &,int))); + connect(m_pTableWidget,SIGNAL(doubleClicked(KviTalTableWidgetItem *,const QPoint &,int)),this,SLOT(doubleClicked(KviTalTableWidgetItem *,const QPoint &,int))); fillTransferView(); connect(KviFileTransferManager::instance(),SIGNAL(transferRegistered(KviFileTransfer *)),this,SLOT(transferRegistered(KviFileTransfer *))); @@ -204,15 +244,15 @@ KviFileTransferWindow::~KviFileTransferWindow() bool KviFileTransferWindow::eventFilter( QObject *obj, QEvent *ev ) { - if( (obj==m_pListView) && ( ev->type() == QEvent::KeyPress ) ) + if( (obj==m_pTableWidget) && ( ev->type() == QEvent::KeyPress ) ) { QKeyEvent *keyEvent = (QKeyEvent*)ev; switch(keyEvent->key()) { case Qt::Key_Delete: - if(m_pListView->currentItem()) + if(m_pTableWidget->currentItem()) { - delete m_pListView->currentItem(); + delete m_pTableWidget->currentItem(); return TRUE; } break; @@ -230,10 +270,10 @@ void KviFileTransferWindow::fontChange(const QFont &oldFont) void KviFileTransferWindow::tipRequest(KviDynamicToolTip * tip,const QPoint &pnt) { - KviFileTransferItem * it = (KviFileTransferItem *)m_pListView->itemAt(pnt); + KviFileTransferItem * it = (KviFileTransferItem *)m_pTableWidget->itemAt(pnt); if(!it)return; QString txt = it->transfer()->tipText(); - tip->tip(m_pListView->itemRect(it),txt); + tip->tip(m_pTableWidget->visualItemRect(it),txt); } void KviFileTransferWindow::fillTransferView() @@ -243,25 +283,27 @@ void KviFileTransferWindow::fillTransferView() KviFileTransferItem * it; for(KviFileTransfer * t = l->first();t;t = l->next()) { - it = new KviFileTransferItem(m_pListView,t); + it = new KviFileTransferItem(m_pTableWidget,t); t->setDisplayItem(it); } } KviFileTransferItem * KviFileTransferWindow::findItem(KviFileTransfer * t) { - KviFileTransferItem * it = (KviFileTransferItem *)m_pListView->firstChild(); - while(it) + int i; + KviFileTransferItem * it; + + for(i=0;i<m_pTableWidget->rowCount();i++) { + it = (KviFileTransferItem *)m_pTableWidget->item(i,0); if(it->transfer() == t)return it; - it = (KviFileTransferItem *)(it->nextSibling()); } return 0; } void KviFileTransferWindow::transferRegistered(KviFileTransfer * t) { - KviFileTransferItem * it = new KviFileTransferItem(m_pListView,t); + KviFileTransferItem * it = new KviFileTransferItem(m_pTableWidget,t); //t->setDisplayItem(it); } @@ -273,12 +315,12 @@ void KviFileTransferWindow::transferUnregistering(KviFileTransfer * t) it = 0; } -void KviFileTransferWindow::doubleClicked(KviTalListViewItem *it,const QPoint &pnt,int col) +void KviFileTransferWindow::doubleClicked(KviFileTransferItem *it,const QPoint &pnt,int col) { if(it) openLocalFile(); } -void KviFileTransferWindow::rightButtonPressed(KviTalListViewItem *it,const QPoint &pnt,int col) +void KviFileTransferWindow::rightButtonPressed(KviFileTransferItem *it,const QPoint &pnt,int col) { if(!m_pContextPopup)m_pContextPopup = new KviTalPopupMenu(this); if(!m_pLocalFilePopup)m_pLocalFilePopup = new KviTalPopupMenu(this); @@ -360,7 +402,7 @@ void KviFileTransferWindow::rightButtonPressed(KviTalListViewItem *it,const QPoi m_pLocalFilePopup->insertSeparator(); #endif //COMPILE_KDE_SUPPORT -//-| Grifisx & Noldor |-
+//-| Grifisx & Noldor |- #if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW) id = m_pLocalFilePopup->insertItem(__tr2qs_ctx("&Open","filetransferwindow"),this,SLOT(openLocalFile())); m_pLocalFilePopup->setItemParameter(id,-1); @@ -389,22 +431,24 @@ void KviFileTransferWindow::rightButtonPressed(KviTalListViewItem *it,const QPoi bool bHaveTerminated = false; - KviFileTransferItem * item = (KviFileTransferItem *)m_pListView->firstChild(); - while(item) + int i; + KviFileTransferItem * item; + + for(i=0;i<m_pTableWidget->rowCount();i++) { + item = (KviFileTransferItem *)m_pTableWidget->item(i,0); if(item->transfer()->terminated()) { bHaveTerminated = true; break; } - item = (KviFileTransferItem *)item->nextSibling(); } id = m_pContextPopup->insertItem(__tr2qs_ctx("&Clear Terminated","filetransferwindow"),this,SLOT(clearTerminated())); m_pContextPopup->setItemEnabled(id,bHaveTerminated); bool bAreTransfersActive = false; - if(m_pListView->childCount() >= 1) + if(m_pTableWidget->rowCount() >= 1) bAreTransfersActive = true; id = m_pContextPopup->insertItem(__tr2qs_ctx("Clear &All","filetransferwindow"),this,SLOT(clearAll())); @@ -416,7 +460,8 @@ void KviFileTransferWindow::rightButtonPressed(KviTalListViewItem *it,const QPoi KviFileTransfer * KviFileTransferWindow::selectedTransfer() { - KviTalListViewItem * it = m_pListView->selectedItem(); + if(m_pTableWidget->selectedItems().count() == 0) return 0; + KviFileTransferItem * it = (KviFileTransferItem *)m_pTableWidget->selectedItems().first(); if(!it)return 0; KviFileTransferItem * i = (KviFileTransferItem *)it; return i->transfer(); @@ -622,28 +667,32 @@ void KviFileTransferWindow::openLocalFileFolder() void KviFileTransferWindow::heartbeat() { - if(m_pListView->childCount() < 1)return; +/* +notice to the author: thank you for not have commented this code - KviTalListViewItem * i1; - KviTalListViewItem * i2; + if(m_pTableWidget->rowCount() < 1)return; - i1 = m_pListView->itemAt(QPoint(1,1)); + KviFileTransferItem * i1; + KviFileTransferItem * i2; + + i1 = (KviFileTransferItem *) m_pTableWidget->itemAt(QPoint(1,1)); if(!i1) { - m_pListView->viewport()->update(); + m_pTableWidget->viewport()->update(); return; } - i2 = m_pListView->itemAt(QPoint(1,m_pListView->viewport()->height() - 2)); + i2 = (KviFileTransferItem *) m_pTableWidget->itemAt(QPoint(1,m_pTableWidget->viewport()->height() - 2)); if(i2)i2 = i2->nextSibling(); while(i1 && (i1 != i2)) { if(((KviFileTransferItem *)i1)->transfer()->active()) { - m_pListView->repaintItem(i1); + m_pTableWidget->repaintItem(i1); } i1 = i1->nextSibling(); } +*/ } void KviFileTransferWindow::clearAll() @@ -651,15 +700,17 @@ void KviFileTransferWindow::clearAll() QString tmp; bool bHaveAllTerminated = true; - KviFileTransferItem * item = (KviFileTransferItem *)m_pListView->firstChild(); - while(item) + int i; + KviFileTransferItem * item; + + for(i=0;i<m_pTableWidget->rowCount();i++) { + item = (KviFileTransferItem *)m_pTableWidget->item(i,0); if(!item->transfer()->terminated()) { bHaveAllTerminated = false; break; } - item = (KviFileTransferItem *)item->nextSibling(); } KviQString::sprintf(tmp,__tr2qs_ctx("Clear all transfers, including any in progress?","filetransferwindow")); diff --git a/src/modules/filetransferwindow/filetransferwindow.h b/src/modules/filetransferwindow/filetransferwindow.h index 39469912c..8a0ee5264 100644 --- a/src/modules/filetransferwindow/filetransferwindow.h +++ b/src/modules/filetransferwindow/filetransferwindow.h @@ -32,45 +32,67 @@ #include "kvi_moduleextension.h" #include "kvi_filetransfer.h" #include "kvi_dynamictooltip.h" -#include "kvi_tal_listview.h" +#include "kvi_tal_tablewidget.h" #include "kvi_tal_popupmenu.h" +#include "kvi_tal_itemdelegates.h" #include "kvi_styled_controls.h" #include <QTimer> #include <QPixmap> +class KviFileTransferWidget : public KviTalTableWidget +{ + friend class KviFileTransferItemDelegate; + Q_OBJECT +public: + KviFileTransferWidget(QWidget * pParent) : KviTalTableWidget(pParent) {}; + ~KviFileTransferWidget() {}; + void paintEvent(QPaintEvent * event); +}; -class KviFileTransferItem : public KviTalListViewItem +class KviFileTransferItem : public KviTalTableWidgetItem { public: - KviFileTransferItem(KviTalListView * v,KviFileTransfer * t); + KviFileTransferItem(KviFileTransferWidget * v,KviFileTransfer * t); ~KviFileTransferItem(); protected: KviFileTransfer * m_pTransfer; + KviTalTableWidgetItem * col1Item; //item on the second column + KviTalTableWidgetItem * col2Item; //item on the third column public: KviFileTransfer * transfer(){ return m_pTransfer; }; - virtual void paintCell(QPainter * p,const QColorGroup &cg,int column,int width,int align); - virtual void setHeight(int h); virtual QString key(int column,bool bAcending) const; }; +class KviFileTransferItemDelegate : public KviTalIconAndRichTextItemDelegate +{ + Q_OBJECT +public: + KviFileTransferItemDelegate(QAbstractItemView * pWidget=0) + : KviTalIconAndRichTextItemDelegate(pWidget) {}; + ~KviFileTransferItemDelegate(){}; + QSize sizeHint(const QStyleOptionViewItem &option,const QModelIndex &index) const; + void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const; +}; class KviFileTransferWindow : public KviWindow , public KviModuleExtension { friend class KviFileTransferItem; + friend class KviFileTransferItemDelegate; Q_OBJECT public: KviFileTransferWindow(KviModuleExtensionDescriptor * d,KviFrame * lpFrm); ~KviFileTransferWindow(); protected: - QSplitter * m_pVertSplitter; - KviTalListView * m_pListView; - KviTalPopupMenu * m_pContextPopup; - KviTalPopupMenu * m_pLocalFilePopup; - KviTalPopupMenu * m_pOpenFilePopup; - QTimer * m_pTimer; - QPixmap * m_pMemPixmap; - int m_iLineSpacing; // cached fm value + QSplitter * m_pVertSplitter; + KviFileTransferWidget * m_pTableWidget; + QAbstractItemDelegate * m_pItemDelegate; + KviTalPopupMenu * m_pContextPopup; + KviTalPopupMenu * m_pLocalFilePopup; + KviTalPopupMenu * m_pOpenFilePopup; + QTimer * m_pTimer; + QPixmap * m_pMemPixmap; + int m_iLineSpacing; // cached fm value public: // Methods virtual void die(); protected: @@ -91,8 +113,8 @@ public: protected slots: void transferRegistered(KviFileTransfer *t); void transferUnregistering(KviFileTransfer *t); - void rightButtonPressed(KviTalListViewItem *it,const QPoint &pnt,int col); - void doubleClicked(KviTalListViewItem *it,const QPoint &pnt,int col); + void rightButtonPressed(KviFileTransferItem *it,const QPoint &pnt,int col); + void doubleClicked(KviFileTransferItem *it,const QPoint &pnt,int col); void heartbeat(); void clearTerminated(); void clearAll(); diff --git a/src/modules/http/httpfiletransfer.cpp b/src/modules/http/httpfiletransfer.cpp index b28b39954..23697d426 100644 --- a/src/modules/http/httpfiletransfer.cpp +++ b/src/modules/http/httpfiletransfer.cpp @@ -113,8 +113,9 @@ bool KviHttpFileTransfer::active() return ((m_eGeneralStatus == Connecting) || (m_eGeneralStatus == Downloading)); } -void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int height) +void KviHttpFileTransfer::displayPaint(QPainter * p,int column, QRect rect) { + int width = rect.width(), height = rect.height(); QString txt; bool bIsTerminated = ((m_eGeneralStatus == Success) || (m_eGeneralStatus == Failure)); @@ -131,7 +132,7 @@ void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int hei case Success: offset = 96; break; case Failure: offset = 144; break; } - p->drawPixmap(3,3,*g_pHttpIcon,offset,0,48,64); + p->drawPixmap(rect.left() + 3, rect.top() + 3,*g_pHttpIcon,offset,0,48,64); } break; case COLUMN_FILEINFO: @@ -148,30 +149,30 @@ void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int hei p->setPen(Qt::black); - int iY = 4; + int iY = rect.top() + 4; - p->drawText(4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft,m_pHttpRequest->url().url().ptr()); + p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft,m_pHttpRequest->url().url().ptr()); iY += iLineSpacing; if(!(m_pHttpRequest->fileName().isEmpty())) { - p->drawText(4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft,m_pHttpRequest->fileName()); + p->drawText(rect.left() + 4 + daW1,iY,width - (8 + daW1),height - 8,Qt::AlignTop | Qt::AlignLeft,m_pHttpRequest->fileName()); } iY += iLineSpacing; p->setPen(Qt::darkGray); - p->drawText(4,4,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szFrom); - p->drawText(4,4 + iLineSpacing,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szTo); + p->drawText(rect.left() + 4, rect.top() + 4,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szFrom); + p->drawText(rect.left() + 4, rect.top() + 4 + iLineSpacing,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,szTo); p->setPen(QColor(180,180,200)); iLineSpacing += 2; - p->drawRect(4,height - (iLineSpacing + 4),width - 8,iLineSpacing); - p->fillRect(5,height - (iLineSpacing + 3),width - 10,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + 4, rect.top() + height - (iLineSpacing + 4),width - 8,iLineSpacing); + p->fillRect(rect.left() + 5, rect.top() + height - (iLineSpacing + 3),width - 10,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); p->setPen(Qt::black); - p->drawText(7,height - (iLineSpacing + 4),width - 14,iLineSpacing,Qt::AlignVCenter | Qt::AlignLeft,m_szStatusString); + p->drawText(rect.left() + 7, rect.top() + height - (iLineSpacing + 4),width - 14,iLineSpacing,Qt::AlignVCenter | Qt::AlignLeft,m_szStatusString); } break; case COLUMN_PROGRESS: @@ -183,7 +184,7 @@ void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int hei int iW = width - 8; p->setPen(bIsTerminated ? Qt::lightGray : QColor(210,210,240)); - p->drawRect(4,4,iW,12); + p->drawRect(rect.left() + 4, rect.top() + 4,iW,12); int iAvgSpeed = -1; int iEta = -1; @@ -209,7 +210,7 @@ void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int hei iW -= 2; int iL = (int) ((((double)iW) * dPerc) / 100.0); //iR = iW - iL; - p->fillRect(5,5,iL,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); + p->fillRect(rect.left() + 5, rect.top() + 5,iL,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100)); txt = QString(__tr2qs_ctx("%1 of %2 (%3 %)","http")).arg(KviQString::makeSizeReadable(uRecvd)) .arg(KviQString::makeSizeReadable(uTotal)).arg(dPerc,0,'f',2); @@ -219,7 +220,7 @@ void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int hei p->setPen(Qt::black); - p->drawText(4,19,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,txt); + p->drawText(rect.left() + 4, rect.top() + 19,width - 8,height - 8,Qt::AlignTop | Qt::AlignLeft,txt); int iLeftHalf = (iW - 2) / 2; int iRightHalf = iW - (iLeftHalf + 1); @@ -254,10 +255,10 @@ void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int hei int iDaH = height - (iLineSpacing + 4); p->setPen(QColor(180,180,200)); - p->drawRect(4,iDaH,iLeftHalf,iLineSpacing); - p->fillRect(5,iDaH + 1,iLeftHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + 4, rect.top() + iDaH,iLeftHalf,iLineSpacing); + p->fillRect(rect.left() + 5, rect.top() + iDaH + 1,iLeftHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(6,iDaH,iLeftHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); + p->drawText(rect.left() + 6, rect.top() + iDaH,iLeftHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); unsigned int uD,uH,uM,uS; @@ -282,10 +283,10 @@ void KviHttpFileTransfer::displayPaint(QPainter * p,int column,int width,int hei } p->setPen(QColor(180,180,200)); - p->drawRect(width - (4 + iRightHalf),iDaH,iRightHalf,iLineSpacing); - p->fillRect(width - (3 + iRightHalf),iDaH + 1,iRightHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); + p->drawRect(rect.left() + width - (4 + iRightHalf), rect.top() + iDaH,iRightHalf,iLineSpacing); + p->fillRect(rect.left() + width - (3 + iRightHalf), rect.top() + iDaH + 1,iRightHalf - 2,iLineSpacing - 2,bIsTerminated ? QColor(210,210,210) : QColor(190,190,240)); p->setPen(bIsTerminated ? Qt::darkGray : Qt::black); - p->drawText(width - (2 + iRightHalf),iDaH,iRightHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); + p->drawText(rect.left() + width - (2 + iRightHalf), rect.top() + iDaH,iRightHalf - 4,iLineSpacing,Qt::AlignLeft | Qt::AlignVCenter,txt); } break; diff --git a/src/modules/http/httpfiletransfer.h b/src/modules/http/httpfiletransfer.h index 3800538cb..5216df6fb 100644 --- a/src/modules/http/httpfiletransfer.h +++ b/src/modules/http/httpfiletransfer.h @@ -76,7 +76,7 @@ public: void setAutoClean(bool bAutoClean){ m_bAutoClean = bAutoClean; }; void setNoOutput(bool bNoOutput){ m_bNoOutput = bNoOutput; }; - virtual void displayPaint(QPainter * p,int column,int width,int height); + virtual void displayPaint(QPainter * p,int column, QRect rect); virtual int displayHeight(int iLineSpacing); virtual void fillContextPopup(KviTalPopupMenu * m,int column); virtual bool active(); |
