diff options
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/list/ListWindow.cpp | 54 | ||||
| -rw-r--r-- | src/modules/list/ListWindow.h | 15 |
2 files changed, 47 insertions, 22 deletions
diff --git a/src/modules/list/ListWindow.cpp b/src/modules/list/ListWindow.cpp index 9497774f2..ce760e5ba 100644 --- a/src/modules/list/ListWindow.cpp +++ b/src/modules/list/ListWindow.cpp @@ -46,6 +46,7 @@ #include "KviThemedLineEdit.h" #include <QTimer> +#include <QHeaderView> #include <QPainter> #include <QFontMetrics> #include <QToolTip> @@ -79,53 +80,60 @@ ChannelTreeWidgetItem::~ChannelTreeWidgetItem() { } -int ChannelTreeWidgetItem::width(const QFontMetrics & fm, const QTreeWidget *, int iColumn) const +bool ChannelTreeWidgetItem::operator<(const QTreeWidgetItem & other) const { - switch(iColumn) + switch(treeWidget()->sortColumn()) { case 0: //channel - return fm.width(m_pData->m_szChan); + return m_pData->m_szChan.toUpper() < ((ChannelTreeWidgetItem*)&other)->itemData()->m_szChan.toUpper(); break; case 1: //users - return fm.width(m_pData->m_szUsers.toInt()); + return m_pData->m_szUsers.toInt() < ((ChannelTreeWidgetItem*)&other)->itemData()->m_szUsers.toInt(); break; case 2: default: //topic - return fm.width(KviMircCntrl::stripControlBytes(m_pData->m_szTopic)); + return KviMircCntrl::stripControlBytes(m_pData->m_szTopic.toUpper()) < KviMircCntrl::stripControlBytes(((ChannelTreeWidgetItem*)&other)->itemData()->m_szTopic.toUpper()); break; } } -bool ChannelTreeWidgetItem::operator<(const QTreeWidgetItem & other) const +ChannelTreeWidgetItemDelegate::ChannelTreeWidgetItemDelegate(QTreeWidget * pWidget) +: QItemDelegate(pWidget) { - switch(treeWidget()->sortColumn()) +} + +ChannelTreeWidgetItemDelegate::~ChannelTreeWidgetItemDelegate() +{ +} + +QSize ChannelTreeWidgetItemDelegate::sizeHint( const QStyleOptionViewItem &sovItem, const QModelIndex &index) const +{ + ChannelTreeWidget* treeWidget = (ChannelTreeWidget*)parent(); + ChannelTreeWidgetItem * item = (ChannelTreeWidgetItem*)treeWidget->itemFromIndex(index); + int iHeight=treeWidget->fontMetrics().lineSpacing(); + + QFontMetrics fm(sovItem.font); + switch(index.column()) { case 0: //channel - return m_pData->m_szChan.toUpper() < ((ChannelTreeWidgetItem*)&other)->itemData()->m_szChan.toUpper(); + return QSize(fm.width(item->itemData()->m_szChan), iHeight); break; case 1: //users - return m_pData->m_szUsers.toInt() < ((ChannelTreeWidgetItem*)&other)->itemData()->m_szUsers.toInt(); + return QSize(fm.width(item->itemData()->m_szUsers.toInt()), iHeight); break; case 2: default: //topic - return KviMircCntrl::stripControlBytes(m_pData->m_szTopic.toUpper()) < KviMircCntrl::stripControlBytes(((ChannelTreeWidgetItem*)&other)->itemData()->m_szTopic.toUpper()); + return QSize(fm.width(KviMircCntrl::stripControlBytes(item->itemData()->m_szTopic)), iHeight); break; } -} - -ChannelTreeWidgetItemDelegate::ChannelTreeWidgetItemDelegate(QTreeWidget * pWidget) -: QItemDelegate(pWidget) -{ -} - -ChannelTreeWidgetItemDelegate::~ChannelTreeWidgetItemDelegate() -{ + //make gcc happy + return QSize(); } void ChannelTreeWidgetItemDelegate::paint(QPainter * p, const QStyleOptionViewItem & option, const QModelIndex & index) const @@ -219,7 +227,7 @@ ListWindow::ListWindow(KviMainWindow * lpFrm, KviConsoleWindow * lpConsole) m_pInfoLabel = new KviThemedLabel(m_pTopSplitter, this, "info_label"); - m_pTreeWidget = new KviThemedTreeWidget(m_pVertSplitter, this, "list_treewidget"); + m_pTreeWidget = new ChannelTreeWidget(m_pVertSplitter, this, "list_treewidget"); m_pTreeWidget->setSelectionBehavior(QAbstractItemView::SelectRows); m_pTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection); m_pTreeWidget->setItemDelegate(new ChannelTreeWidgetItemDelegate(m_pTreeWidget)); @@ -232,6 +240,12 @@ ListWindow::ListWindow(KviMainWindow * lpFrm, KviConsoleWindow * lpConsole) m_pTreeWidget->setAllColumnsShowFocus(TRUE); m_pTreeWidget->setSortingEnabled(TRUE); m_pTreeWidget->sortItems(0,Qt::AscendingOrder); + + m_pTreeWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); + m_pTreeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + m_pTreeWidget->header()->setStretchLastSection(false); + m_pTreeWidget->header()->setResizeMode(QHeaderView::ResizeToContents); + connect(m_pTreeWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),this,SLOT(itemDoubleClicked(QTreeWidgetItem *, int))); m_pIrcView = new KviIrcView(m_pVertSplitter,lpFrm,this); diff --git a/src/modules/list/ListWindow.h b/src/modules/list/ListWindow.h index cf8cf3d17..00bc56698 100644 --- a/src/modules/list/ListWindow.h +++ b/src/modules/list/ListWindow.h @@ -47,6 +47,7 @@ public: ChannelTreeWidgetItemDelegate(QTreeWidget * pWidget = 0); ~ChannelTreeWidgetItemDelegate(); void paint(QPainter * pPainter, const QStyleOptionViewItem & option, const QModelIndex & index ) const; + QSize sizeHint(const QStyleOptionViewItem &option,const QModelIndex &index) const; }; class ChannelTreeWidgetItemData @@ -72,11 +73,21 @@ public: private: ChannelTreeWidgetItemData * m_pData; public: - int width (const QFontMetrics & fm, const QTreeWidget * pWidget, int iColumn) const; bool operator<(const QTreeWidgetItem & other) const; inline ChannelTreeWidgetItemData * itemData() { return m_pData; }; }; +class ChannelTreeWidget: public KviThemedTreeWidget +{ + friend class ChannelTreeWidgetItem; + friend class ChannelTreeWidgetItemData; + Q_OBJECT +public: + ChannelTreeWidget(QWidget * par, KviWindow * pWindow, const char * name) : KviThemedTreeWidget(par, pWindow, name) {}; + ~ChannelTreeWidget() {}; + ChannelTreeWidgetItem* itemFromIndex(const QModelIndex & index) const { return (ChannelTreeWidgetItem*) KviThemedTreeWidget::itemFromIndex(index); }; +}; + class ListWindow : public KviWindow, public KviExternalServerDataParser { Q_OBJECT @@ -86,7 +97,7 @@ public: protected: QSplitter * m_pVertSplitter; QSplitter * m_pTopSplitter; - KviThemedTreeWidget * m_pTreeWidget; + ChannelTreeWidget * m_pTreeWidget; KviThemedLineEdit * m_pParamsEdit; QToolButton * m_pRequestButton; QToolButton * m_pStopListDownloadButton; |
