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/filetransferwindow | |
| 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/filetransferwindow')
| -rw-r--r-- | src/modules/filetransferwindow/filetransferwindow.cpp | 217 | ||||
| -rw-r--r-- | src/modules/filetransferwindow/filetransferwindow.h | 52 |
2 files changed, 171 insertions, 98 deletions
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(); |
