aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Fabio Bas2008-06-27 16:53:23 +0000
committerGravatar Fabio Bas2008-06-27 16:53:23 +0000
commit998753e7d890d9ffdf2236e78797e3727d4bef79 (patch)
tree7aac843788333b72a7c8d4e0497b5117d91c2bd2 /src/modules
parentFixed the order of class registration in the objects module (diff)
downloadKVIrc-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.cpp42
-rw-r--r--src/modules/dcc/send.h2
-rw-r--r--src/modules/filetransferwindow/filetransferwindow.cpp217
-rw-r--r--src/modules/filetransferwindow/filetransferwindow.h52
-rw-r--r--src/modules/http/httpfiletransfer.cpp39
-rw-r--r--src/modules/http/httpfiletransfer.h2
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();