From 998753e7d890d9ffdf2236e78797e3727d4bef79 Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Fri, 27 Jun 2008 16:53:23 +0000 Subject: 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 --- src/kvilib/CMakeLists.txt | 2 + src/kvilib/tal/kvi_tal_tablewidget.cpp | 102 ++++++++++ src/kvilib/tal/kvi_tal_tablewidget.h | 129 ++++++++++++ src/kvilib/tal/kvi_tal_treewidget.cpp | 48 +---- src/kvilib/tal/kvi_tal_treewidget.h | 120 +----------- src/kvirc/kernel/kvi_filetransfer.h | 8 +- src/kvirc/ui/kvi_taskbar.cpp | 8 +- src/modules/dcc/send.cpp | 42 ++-- src/modules/dcc/send.h | 2 +- .../filetransferwindow/filetransferwindow.cpp | 217 +++++++++++++-------- .../filetransferwindow/filetransferwindow.h | 52 +++-- src/modules/http/httpfiletransfer.cpp | 39 ++-- src/modules/http/httpfiletransfer.h | 2 +- 13 files changed, 455 insertions(+), 316 deletions(-) create mode 100644 src/kvilib/tal/kvi_tal_tablewidget.cpp create mode 100644 src/kvilib/tal/kvi_tal_tablewidget.h (limited to 'src') diff --git a/src/kvilib/CMakeLists.txt b/src/kvilib/CMakeLists.txt index d69b3f11a..f9955e9d8 100644 --- a/src/kvilib/CMakeLists.txt +++ b/src/kvilib/CMakeLists.txt @@ -92,6 +92,7 @@ SET(kvilib_MOC_HDRS tal/kvi_tal_menubar.h tal/kvi_tal_scrollview.h tal/kvi_tal_tabdialog.h + tal/kvi_tal_tablewidget.h tal/kvi_tal_toolbardocktype.h tal/kvi_tal_tooltip.h tal/kvi_tal_textedit.h @@ -184,6 +185,7 @@ SET(kvilib_SRCS tal/kvi_tal_popupmenu.cpp tal/kvi_tal_scrollview.cpp tal/kvi_tal_tabdialog.cpp + tal/kvi_tal_tablewidget.cpp tal/kvi_tal_textedit.cpp tal/kvi_tal_toolbar.cpp tal/kvi_tal_tooltip.cpp diff --git a/src/kvilib/tal/kvi_tal_tablewidget.cpp b/src/kvilib/tal/kvi_tal_tablewidget.cpp new file mode 100644 index 000000000..80fe4d59e --- /dev/null +++ b/src/kvilib/tal/kvi_tal_tablewidget.cpp @@ -0,0 +1,102 @@ +//============================================================================= +// +// File : kvi_tal_tablewidget.cpp +// Creation date : Fri Jun 27 2008 10:00:08 by Fabio Bas +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 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 +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +//============================================================================= + +#define __KVILIB__ + +#include "kvi_tal_tablewidget.h" +/* +#include "kvi_pointerhashtable.h" + +#include +#include +#include +#include +#include +#include +#include +*/ +KviTalTableWidget::KviTalTableWidget(QWidget * pParent) +: QTableWidget(pParent) +{ +/* + connect(this,SIGNAL(currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *)),this,SLOT(redirect_currentItemChanged(QTreeWidgetItem *,QTreeWidgetItem *))); + connect(this,SIGNAL(itemActivated(QTreeWidgetItem *,int)),this,SLOT(redirect_itemActivated(QTreeWidgetItem *,int))); + connect(this,SIGNAL(itemChanged(QTreeWidgetItem *,int)),this,SLOT(redirect_itemChanged(QTreeWidgetItem *,int))); + connect(this,SIGNAL(itemClicked(QTreeWidgetItem *,int)),this,SLOT(redirect_itemClicked(QTreeWidgetItem *,int))); + connect(this,SIGNAL(itemCollapsed(QTreeWidgetItem *)),this,SLOT(redirect_itemCollapsed(QTreeWidgetItem *))); + connect(this,SIGNAL(itemExpanded(QTreeWidgetItem *)),this,SLOT(redirect_itemExpanded(QTreeWidgetItem *))); + connect(this,SIGNAL(itemDoubleClicked(QTreeWidgetItem *,int)),this,SLOT(redirect_itemDoubleClicked(QTreeWidgetItem *,int))); + connect(this,SIGNAL(itemEntered(QTreeWidgetItem *,int)),this,SLOT(redirect_itemEntered(QTreeWidgetItem *,int))); + connect(this,SIGNAL(itemPressed(QTreeWidgetItem *,int)),this,SLOT(redirect_itemPressed(QTreeWidgetItem *,int))); +*/ +} +/* +void KviTalTreeWidget::redirect_currentItemChanged(QTreeWidgetItem *pItemCurr,QTreeWidgetItem *pItemPrev) +{ + emit currentItemChanged((KviTalTreeWidgetItem *)pItemCurr,(KviTalTreeWidgetItem *)pItemPrev); +} + +void KviTalTreeWidget::redirect_itemActivated(QTreeWidgetItem *pItem,int col) +{ + emit itemActivated((KviTalTreeWidgetItem *)pItem,col); +} + +void KviTalTreeWidget::redirect_itemChanged(QTreeWidgetItem *pItem,int col) +{ + emit itemChanged((KviTalTreeWidgetItem *)pItem,col); +} + + +void KviTalTreeWidget::redirect_itemClicked(QTreeWidgetItem *pItem,int col) +{ + emit itemClicked((KviTalTreeWidgetItem *)pItem,col); +} + +void KviTalTreeWidget::redirect_itemCollapsed(QTreeWidgetItem *pItem) +{ + emit itemCollapsed((KviTalTreeWidgetItem *)pItem); +} + +void KviTalTreeWidget::redirect_itemExpanded(QTreeWidgetItem *pItem) +{ + emit itemExpanded((KviTalTreeWidgetItem *)pItem); +} + +void KviTalTreeWidget::redirect_itemDoubleClicked(QTreeWidgetItem *pItem,int col) +{ + emit itemDoubleClicked((KviTalTreeWidgetItem *)pItem,col); +} + +void KviTalTreeWidget::redirect_itemEntered(QTreeWidgetItem *pItem,int col) +{ + emit itemEntered((KviTalTreeWidgetItem *)pItem,col); +} +void KviTalTreeWidget::redirect_itemPressed(QTreeWidgetItem *pItem,int col) +{ + emit itemPressed((KviTalTreeWidgetItem *)pItem,col); +} +*/ +#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES + #include "kvi_tal_treewidget.moc" +#endif //!COMPILE_USE_STANDALONE_MOC_SOURCES diff --git a/src/kvilib/tal/kvi_tal_tablewidget.h b/src/kvilib/tal/kvi_tal_tablewidget.h new file mode 100644 index 000000000..0c28d85fe --- /dev/null +++ b/src/kvilib/tal/kvi_tal_tablewidget.h @@ -0,0 +1,129 @@ +#ifndef _KVI_TAL_TABLEWIDGET_H_ +#define _KVI_TAL_TABLEWIDGET_H_ + +//============================================================================= +// +// File : kvi_tal_tablewidget.h +// Creation date : Fri Jun 27 2008 10:00:08 by Fabio Bas +// +// This file is part of the KVirc irc client distribution +// Copyright (C) 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 +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +//============================================================================= + +#include "kvi_settings.h" +#include "kvi_qstring.h" + +#include +#include + +class KviTalTableWidgetItem; + +class KVILIB_API KviTalTableWidget : public QTableWidget +{ + friend class KviTalTableWidgetItem; + Q_OBJECT +public: + KviTalTableWidget(QWidget * pParent); + virtual ~KviTalTableWidget() {}; +public: +/* +signals: + void currentItemChanged(KviTalTreeWidgetItem *,KviTalTreeWidgetItem *); + void itemActivated(KviTalTreeWidgetItem *,int); + void itemChanged(KviTalTreeWidgetItem *,int); + void itemClicked(KviTalTreeWidgetItem *,int); + + void itemCollapsed(KviTalTreeWidgetItem *); + void itemExpanded(KviTalTreeWidgetItem *); + void itemDoubleClicked(KviTalTreeWidgetItem *,int); + void itemEntered(KviTalTreeWidgetItem *,int); + void itemPressed(KviTalTreeWidgetItem *,int); + +protected slots: + void redirect_currentItemChanged(QTreeWidgetItem *pItemCurr,QTreeWidgetItem *pItemPrev); + void redirect_itemActivated(QTreeWidgetItem *pItem,int col); + void redirect_itemChanged(QTreeWidgetItem *pItem,int col); + void redirect_itemClicked(QTreeWidgetItem *pItem,int col); + void redirect_itemCollapsed(QTreeWidgetItem *pItem); + void redirect_itemExpanded(QTreeWidgetItem *pItem); + void redirect_itemDoubleClicked(QTreeWidgetItem *pItem,int col); + void redirect_itemEntered(QTreeWidgetItem *pItem,int col); + void redirect_itemPressed(QTreeWidgetItem *pItem,int col); +*/ +}; + + +class KVILIB_API KviTalTableWidgetItem : public QTableWidgetItem +{ +public: + KviTalTableWidgetItem(KviTalTableWidget * pParent) + : QTableWidgetItem() + { + pParent->insertRow(pParent->rowCount()); + pParent->setItem(pParent->rowCount()-1, 0, this); + }; + + KviTalTableWidgetItem(KviTalTableWidget * pParent, int row, int column) + : QTableWidgetItem() + { + pParent->setItem(row, column, this); + }; + + KviTalTableWidgetItem(const KviTalTableWidgetItem & other) + : QTableWidgetItem(other) {}; + void repaint() + { + if(tableWidget()) + tableWidget()->viewport()->repaint(tableWidget()->visualItemRect(this)); + }; +/* + KviTalTableWidgetItem(KviTalTableWidgetItem * pParent,const QString &szLabel) + : QTableWidgetItem(pParent) { + setText(0,szLabel); + }; + KviTalTableWidgetItem(KviTalTableWidget * pParent,const QString &szLabel) + : QTableWidgetItem(pParent) { + setText(0,szLabel); + }; + + KviTalTreeWidgetItem(KviTalTreeWidget * pParent,const QString &szLabel, const QString &szLabel1, const QString &szLabel2, const QString &szLabel3 ) + : QTreeWidgetItem(pParent) { + setText(0,szLabel); + setText(1,szLabel1); + setText(2,szLabel2); + setText(3,szLabel3); + + }; + KviTalTreeWidgetItem(KviTalTreeWidget * pParent,const QString &szLabel, const QString &szLabel1, const QString &szLabel2, const QString &szLabel3, const QString &szLabel4 ) + : QTreeWidgetItem(pParent) { + setText(0,szLabel); + setText(1,szLabel1); + setText(2,szLabel2); + setText(3,szLabel3); + setText(4,szLabel4); + }; + int compare ( KviTalTreeWidgetItem * i, int col, bool ascending ) const + { + QString key=text(col); + return key.localeAwareCompare(i->text(col)); + }; + KviTalTreeWidget* treeWidget() { return (KviTalTreeWidget*) QTreeWidgetItem::treeWidget(); }; +*/ +}; + +#endif // _KVI_TAL_TABLEWIDGET_H_ diff --git a/src/kvilib/tal/kvi_tal_treewidget.cpp b/src/kvilib/tal/kvi_tal_treewidget.cpp index 79ccfebeb..4c1a69a5c 100644 --- a/src/kvilib/tal/kvi_tal_treewidget.cpp +++ b/src/kvilib/tal/kvi_tal_treewidget.cpp @@ -34,53 +34,7 @@ #include #include #include -/* -static QStyleOptionQ3ListView getStyleOption(const Q3ListView *lv, const Q3ListViewItem *item) -{ - QStyleOptionQ3ListView opt; - opt.init(lv); - opt.subControls = QStyle::SC_None; - opt.activeSubControls = QStyle::SC_None; - QWidget *vp = lv->viewport(); - opt.viewportPalette = vp->palette(); - opt.viewportBGRole = vp->backgroundRole(); - opt.itemMargin = lv->itemMargin(); - opt.sortColumn = 0; - opt.treeStepSize = lv->treeStepSize(); - opt.rootIsDecorated = lv->rootIsDecorated(); - bool firstItem = true; - while (item) { - QStyleOptionQ3ListViewItem lvi; - lvi.height = item->height(); - lvi.totalHeight = item->totalHeight(); - lvi.itemY = item->itemPos(); - lvi.childCount = item->childCount(); - lvi.features = QStyleOptionQ3ListViewItem::None; - lvi.state = QStyle::State_None; - if (item->isEnabled()) - lvi.state |= QStyle::State_Enabled; - if (item->isOpen()) - lvi.state |= QStyle::State_Open; - if (item->isExpandable()) - lvi.features |= QStyleOptionQ3ListViewItem::Expandable; - if (item->multiLinesEnabled()) - lvi.features |= QStyleOptionQ3ListViewItem::MultiLine; - if (item->isVisible()) - lvi.features |= QStyleOptionQ3ListViewItem::Visible; - if (item->parent() && item->parent()->rtti() == 1 - && static_cast(item->parent())->type() == Q3CheckListItem::Controller) - lvi.features |= QStyleOptionQ3ListViewItem::ParentControl; - opt.items.append(lvi); - if (!firstItem) { - item = item->nextSibling(); - } else { - firstItem = false; - item = item->firstChild(); - } - } - return opt; -} -*/ + KviTalTreeWidget::KviTalTreeWidget(QWidget * pParent) : QTreeWidget(pParent) { diff --git a/src/kvilib/tal/kvi_tal_treewidget.h b/src/kvilib/tal/kvi_tal_treewidget.h index ddb6ca2a8..df755a6e2 100644 --- a/src/kvilib/tal/kvi_tal_treewidget.h +++ b/src/kvilib/tal/kvi_tal_treewidget.h @@ -3,7 +3,7 @@ //============================================================================= // -// File : kvi_tal_listview.h +// File : kvi_tal_treewidget.h // Creation date : Mon Jan 22 2007 11:25:08 by Szymon Stefanek // // This file is part of the KVirc irc client distribution @@ -25,21 +25,6 @@ // //============================================================================= - -// -// This is the only reasonable CROSS-QT3-QT4-COMPATIBLE implementation -// of QListView I've been able to find. -// Note that using macros for the items will NOT work since moc -// doesn't expand them. Note also that KviTalCheckListItem must -// be fully reimplemented and not be inherited from QCheckListItem -// to build up a consistent item object hierarchy. To complete -// the obscenity, we need TWO COMPLETE implementations: one for Qt3 -// and one for Qt4... bleah :D -// -// The code for KviTalCheckListItem is adapted from qlistview.h/cpp -// present in qt 3.3.6 AND in qt 4.1.2. -// - #include "kvi_settings.h" #include "kvi_qstring.h" @@ -70,8 +55,6 @@ signals: void itemDoubleClicked(KviTalTreeWidgetItem *,int); void itemEntered(KviTalTreeWidgetItem *,int); void itemPressed(KviTalTreeWidgetItem *,int); - - protected slots: void redirect_currentItemChanged(QTreeWidgetItem *pItemCurr,QTreeWidgetItem *pItemPrev); @@ -123,107 +106,6 @@ public: return key.localeAwareCompare(i->text(col)); }; KviTalTreeWidget* treeWidget() { return (KviTalTreeWidget*) QTreeWidgetItem::treeWidget(); }; - - /* - KviTalTreeWidgetItem(KviTalTreeWidget * pParent,KviTalTreeWidgetItem * pAfter) - : Q3ListViewItem(pParent,pAfter) {}; - KviTalTreeWidgetItem(KviTalTreeWidgetItem * pParent,KviTalTreeWidgetItem * pAfter) - : Q3ListViewItem(pParent,pAfter) {}; - const QString &szLabel2 = KviQString::empty,const QString &szLabel3 = KviQString::empty,const QString &szLabel4 = KviQString::empty,const QString &szLabel5 = KviQString::empty) - : Q3ListViewItem(pParent,szLabel1,szLabel2,szLabel3,szLabel4,szLabel5) {}; - KviTalTreeWidgetItem(KviTalTreeWidget * pParent,KviTalTreeWidgetItem * pAfter,const QString &szLabel1,const QString &szLabel2 = KviQString::empty,const QString &szLabel3 = KviQString::empty,const QString &szLabel4 = KviQString::empty,const QString &szLabel5 = KviQString::empty) - : Q3ListViewItem(pParent,pAfter,szLabel1,szLabel2,szLabel3,szLabel4,szLabel5) {}; - KviTalTreeWidgetItem(KviTalTreeWidgetItem * pParent,const QString &szLabel1,const QString &szLabel2 = KviQString::empty,const QString &szLabel3 = KviQString::empty,const QString &szLabel4 = KviQString::empty) - : Q3ListViewItem(pParent,szLabel1,szLabel2,szLabel3,szLabel4) {}; - KviTalTreeWidgetItem(KviTalTreeWidgetItem * pParent,KviTalTreeWidgetItem * pAfter,const QString &szLabel1,const QString &szLabel2 = KviQString::empty,const QString &szLabel3 = KviQString::empty,const QString &szLabel4 = KviQString::empty) - : Q3ListViewItem(pParent,pAfter,szLabel1,szLabel2,szLabel3,szLabel4) {}; -public: - // Shadow the internal Qt methods - KviTalTreeWidgetItem * firstChild() const { return (KviTalTreeWidgetItem *)Q3ListViewItem::firstChild(); }; - KviTalTreeWidgetItem * nextSibling() const { return (KviTalTreeWidgetItem *)Q3ListViewItem::nextSibling(); }; - KviTalTreeWidgetItem * parent() const { return (KviTalTreeWidgetItem *)Q3ListViewItem::parent(); }; - KviTalTreeWidget * listView() const { return (KviTalTreeWidget *)Q3ListViewItem::listView(); }; - KviTalTreeWidgetItem * itemAbove() { return (KviTalTreeWidgetItem *)Q3ListViewItem::itemAbove(); }; - KviTalTreeWidgetItem * itemBelow() { return (KviTalTreeWidgetItem *)Q3ListViewItem::itemBelow(); }; - */ -}; -/* -struct KviTalCheckListItemPrivate; - -class KVILIB_API KviTalCheckListItem : public KviTalTreeWidgetItem -{ -public: - enum Type { - RadioButton, - CheckBox, - Controller, - RadioButtonController=Controller, - CheckBoxController - }; - - enum ToggleState { Off, NoChange, On }; - - KviTalCheckListItem(KviTalCheckListItem *parent, const QString &text, - Type = RadioButtonController); - KviTalCheckListItem(KviTalCheckListItem *parent, KviTalTreeWidgetItem *after, - const QString &text, Type = RadioButtonController); - KviTalCheckListItem(KviTalTreeWidgetItem *parent, const QString &text, - Type = RadioButtonController); - KviTalCheckListItem(KviTalTreeWidgetItem *parent, KviTalTreeWidgetItem *after, - const QString &text, Type = RadioButtonController); - KviTalCheckListItem(KviTalTreeWidget *parent, const QString &text, - Type = RadioButtonController); - KviTalCheckListItem(KviTalTreeWidget *parent, KviTalTreeWidgetItem *after, - const QString &text, Type = RadioButtonController); - KviTalCheckListItem(KviTalTreeWidgetItem *parent, const QString &text, - const QPixmap &); - KviTalCheckListItem(KviTalTreeWidget *parent, const QString &text, - const QPixmap &); - ~KviTalCheckListItem(); - - void paintCell(QPainter *, const QColorGroup & cg, - int column, int width, int alignment); - virtual void paintFocus(QPainter *, const QColorGroup &cg, - const QRect & r); - int width(const QFontMetrics&, const KviTalTreeWidget*, int column) const; - void setup(); - - virtual void setOn(bool); - bool isOn() const { return on; } - Type type() const { return myType; } - QString text() const { return KviTalTreeWidgetItem::text(0); } - QString text(int n) const { return KviTalTreeWidgetItem::text(n); } - - void setTristate(bool); - bool isTristate() const; - ToggleState state() const; - void setState(ToggleState s); - - int rtti() const; - enum { RTTI = 1 }; - -protected: - void activate(); - void turnOffChild(); - virtual void stateChange(bool); - -private: - void init(); - ToggleState internalState() const; - void setStoredState(ToggleState newState, KviTalCheckListItem *key); - ToggleState storedState(KviTalCheckListItem *key) const; - void stateChange(ToggleState s); - void restoreState(KviTalCheckListItem *key, int depth = 0); - void updateController(bool update = true , bool store = false); - void updateStoredState(KviTalCheckListItem *key); - void setState(ToggleState s, bool update, bool store); - void setCurrentState(ToggleState s); - - Type myType; - bool on; - KviTalCheckListItemPrivate *d; }; -#define KviTalTreeWidgetItemIterator Q3ListViewItemIterator -*/ #endif // _KVI_TAL_TREEWIDGETW_H_ diff --git a/src/kvirc/kernel/kvi_filetransfer.h b/src/kvirc/kernel/kvi_filetransfer.h index 85c70a472..6cf489366 100644 --- a/src/kvirc/kernel/kvi_filetransfer.h +++ b/src/kvirc/kernel/kvi_filetransfer.h @@ -27,7 +27,7 @@ #include "kvi_settings.h" #include "kvi_pointerlist.h" -#include "kvi_tal_listview.h" +#include "kvi_tal_tablewidget.h" #include @@ -83,10 +83,10 @@ public: ~KviFileTransfer(); protected: int m_iId; - KviTalListViewItem * m_pDisplayItem; + KviTalTableWidgetItem * m_pDisplayItem; public: // This is called by KviFileTransferItem at any time - void setDisplayItem(KviTalListViewItem * i){ m_pDisplayItem = i; }; + void setDisplayItem(KviTalTableWidgetItem * i){ m_pDisplayItem = i; }; int id(){ return m_iId; }; // this is just a convenience function : it's equivalent to !active() bool terminated(); @@ -103,7 +103,7 @@ public: // this must be implemented by the transfer virtual bool active() = 0; - virtual void displayPaint(QPainter * p,int column,int width,int height) = 0; + virtual void displayPaint(QPainter * p,int column, QRect rect) = 0; virtual QString tipText(); virtual QString localFileName(); virtual QString retryCommand(); diff --git a/src/kvirc/ui/kvi_taskbar.cpp b/src/kvirc/ui/kvi_taskbar.cpp index 4ec847984..0af24a365 100644 --- a/src/kvirc/ui/kvi_taskbar.cpp +++ b/src/kvirc/ui/kvi_taskbar.cpp @@ -44,7 +44,6 @@ #include "kvi_settings.h" #include "kvi_channel.h" #include "kvi_ircconnection.h" -#include "kvi_doublebuffer.h" #include "kvi_tal_popupmenu.h" // FIXME: #warning "The tree taskbar min width should be configurable" @@ -732,6 +731,7 @@ KviTreeTaskBarItem::KviTreeTaskBarItem(KviTalTreeWidget * par,KviWindow * wnd) QObject::connect( m_pAnimTimer, SIGNAL(timeout()), m_pInternal, SLOT(timerShot())); applyOptions(); //sort the widget + //TODO should we implement an operator< to fine tune our sorting? treeWidget()->sortItems(0,Qt::AscendingOrder); } @@ -978,9 +978,7 @@ void KviTreeTaskBarTreeWidget::paintEvent(QPaintEvent * event) QPainter *p = new QPainter(viewport()); QStyleOptionViewItem option = viewOptions(); QRect rect = event->rect(); - int i; - SET_ANTI_ALIASING(*p); #ifdef COMPILE_PSEUDO_TRANSPARENCY if(g_pShadedChildGlobalDesktopBackground) { @@ -1293,9 +1291,6 @@ void KviTreeTaskBarItemDelegate::paint(QPainter * p, const QStyleOptionViewItem //tree branches treeWidget->drawBranches(p, branchRect, index); - //set anti aliasing (this comment is useless) - SET_ANTI_ALIASING(*p); - //draw window icon, irc context indicator (a colored square), set font properties for text int im = rect.left(); int yPixmap = (rect.top() + rect.height() - 16); @@ -1400,6 +1395,7 @@ void KviTreeTaskBarItemDelegate::paint(QPainter * p, const QStyleOptionViewItem QSize KviTreeTaskBarItemDelegate::sizeHint( const QStyleOptionViewItem & option, const QModelIndex & index ) const { QString text=index.data(Qt::DisplayRole).toString(); + // FIXME fixed width: 20; compute from font size return QSize(((KviTreeTaskBarTreeWidget*)parent())->viewport()->size().width(), 20); } #ifndef COMPILE_USE_STANDALONE_MOC_SOURCES 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 #include -// FIXME: Qt4 #include -#include +#include #ifdef COMPILE_KDE_SUPPORT #include @@ -61,19 +60,31 @@ #include #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;irowCount();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;irowCount();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;irowCount();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 #include +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(); -- cgit v1.3.1-10-gc9f91