diff options
| author | 2008-04-11 14:36:16 +0000 | |
|---|---|---|
| committer | 2008-04-11 14:36:16 +0000 | |
| commit | e1d9a7fea933ad36c7515186f12d8a32e414fc38 (patch) | |
| tree | a1dfb9d1e1566f28e5cc12781e81debfaa470bb1 /src/modules | |
| parent | Fix endianness issues on MacOSX (diff) | |
| download | KVIrc-e1d9a7fea933ad36c7515186f12d8a32e414fc38.tar.gz KVIrc-e1d9a7fea933ad36c7515186f12d8a32e414fc38.tar.bz2 KVIrc-e1d9a7fea933ad36c7515186f12d8a32e414fc38.zip | |
TextIcon table view fixes
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1455 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/options/optw_texticons.cpp | 113 | ||||
| -rw-r--r-- | src/modules/options/optw_texticons.h | 36 |
2 files changed, 133 insertions, 16 deletions
diff --git a/src/modules/options/optw_texticons.cpp b/src/modules/options/optw_texticons.cpp index 65e5b0c36..9487b5279 100644 --- a/src/modules/options/optw_texticons.cpp +++ b/src/modules/options/optw_texticons.cpp @@ -34,18 +34,104 @@ #include <QTableWidgetItem> -KviTextIconEditor::KviTextIconEditor(QWidget * par,KviTextIcon * icon,KviTextIconTableItem* item) -: KviTalHBox(par),m_pTableItem(item) + +QWidget * KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate::createEditor(QWidget * parent,const QStyleOptionViewItem & option,const QModelIndex & index) const +{ + if(index.column() != 1) + return QItemDelegate::createEditor(parent,option,index); + return new KviTextIconEditor(parent); +} + +void KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate::setEditorData(QWidget * editor,const QModelIndex & index) const +{ + if(index.column() != 1) + { + QItemDelegate::setEditorData(editor,index); + return; + } + + if(!editor) + return; + if(!editor->inherits("KviTextIconEditor")) + return; + + KviTextIconEditor * pEditor = (KviTextIconEditor *)editor; + + + // FIXME: Should use dynamic_cast<> here (once we know it's really safe to use it on all the platforms) + KviTextIconTableItem * pItem = static_cast<KviTextIconTableItem *>(m_pTableWidget->item(index.row(),index.column())); + if(!pItem) + return; + + pEditor->setIcon(pItem->icon()); + pEditor->updateIcon(); +} + +void KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate::setModelData(QWidget * editor,QAbstractItemModel * model,const QModelIndex & index) const +{ + if(index.column() != 1) + { + QItemDelegate::setModelData(editor,model,index); + return; + } + + if(!editor) + return; + if(!editor->inherits("KviTextIconEditor")) + return; + + KviTextIconEditor * pEditor = (KviTextIconEditor *)editor; + + // FIXME: Should use dynamic_cast<> here (once we know it's really safe to use it on all the platforms) + KviTextIconTableItem * pItem = static_cast<KviTextIconTableItem *>(m_pTableWidget->item(index.row(),index.column())); + if(!pItem) + return; + + pItem->setContentFromEditor(pEditor); +} + +void KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate::updateEditorGeometry(QWidget * editor,const QStyleOptionViewItem & option,const QModelIndex & index) const +{ + if(index.column() != 1) + { + QItemDelegate::updateEditorGeometry(editor,option,index); + return; + } + + if(!editor) + return; + if(!editor->inherits("KviTextIconEditor")) + return; + + KviTextIconEditor * pEditor = (KviTextIconEditor *)editor; + + // FIXME: Should use dynamic_cast<> here (once we know it's really safe to use it on all the platforms) + KviTextIconTableItem * pItem = static_cast<KviTextIconTableItem *>(m_pTableWidget->item(index.row(),index.column())); + if(!pItem) + return; + + pEditor->setGeometry(m_pTableWidget->visualItemRect(pItem)); +} + +KviTextIconEditor::KviTextIconEditor(QWidget * par) +: KviTalHBox(par) { m_pIconButton=new QToolButton(this); m_pBrowseButton=new QToolButton(this); m_pBrowseButton->setSizePolicy(QSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum)); m_pBrowseButton->setText("..."); - m_pIcon = icon; + m_pIcon = NULL; m_pPopup = 0; updateIcon(); connect(m_pIconButton,SIGNAL(clicked()),this,SLOT(doPopup())); connect(m_pBrowseButton,SIGNAL(clicked()),this,SLOT(chooseFromFile())); + setMargin(0); + setSpacing(0); + + // I've spend more than 1 hour to find out the following line. + // Without this the editor disappears on the first click and no clicked() events are forwarded to the buttons. + // It's very ugly. + setFocusPolicy(Qt::ClickFocus); } @@ -68,6 +154,8 @@ void KviTextIconEditor::doPopup() void KviTextIconEditor::iconSelected(int id) { + if(!m_pIcon) + return; m_pIcon->setId(id); updateIcon(); } @@ -89,11 +177,10 @@ void KviTextIconEditor::chooseFromFile() void KviTextIconEditor::updateIcon() { - if(m_pIcon) - { - QPixmap* pix=m_pIcon->pixmap(); - if(pix) m_pIconButton->setPixmap(*pix); - } + if(!m_pIcon) + return; + QPixmap* pix=m_pIcon->pixmap(); + if(pix) m_pIconButton->setPixmap(*pix); } KviTextIconTableItem::KviTextIconTableItem(QTableWidget * t,KviTextIcon * icon) @@ -119,10 +206,10 @@ void KviTextIconTableItem::setId(int id) if(pix) setIcon(QIcon(*pix)); } -QWidget * KviTextIconTableItem::createEditor() const +/*QWidget * KviTextIconTableItem::createEditor() const { return new KviTextIconEditor(tableWidget()->viewport(),m_pIcon,(KviTextIconTableItem*)this); -} +}*/ void KviTextIconTableItem::setContentFromEditor(QWidget * w) { @@ -147,6 +234,9 @@ KviTextIconsOptionsWidget::KviTextIconsOptionsWidget(QWidget * parent) "KVirc will use them to display the CTRL+I escape sequences and eventually the " \ "emoticons.","options")); + + m_pTable->setItemDelegateForColumn(1,new KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate(m_pTable)); + int idx = 0; while(KviTextIcon * i = it.current()) { @@ -188,7 +278,8 @@ void KviTextIconsOptionsWidget::itemSelectionChanged() void KviTextIconsOptionsWidget::addClicked() { m_pTable->setRowCount(m_pTable->rowCount() + 1); - m_pTable->item(m_pTable->rowCount() - 1,0)->setText(__tr2qs_ctx("unnamed","options")); + //m_pTable->item(m_pTable->rowCount() - 1,0)->setText(__tr2qs_ctx("unnamed","options")); + m_pTable->setItem(m_pTable->rowCount() - 1,0,new QTableWidgetItem(__tr2qs_ctx("unnamed","options"))); m_pTable->setItem(m_pTable->rowCount() - 1,1,new KviTextIconTableItem(m_pTable,0)); m_pDel->setEnabled(true); } diff --git a/src/modules/options/optw_texticons.h b/src/modules/options/optw_texticons.h index 62c0b1e05..171d2b498 100644 --- a/src/modules/options/optw_texticons.h +++ b/src/modules/options/optw_texticons.h @@ -31,6 +31,7 @@ #include <QToolButton> #include <QTableWidget> #include <QTableWidgetItem> +#include <QItemDelegate> class KviTextIconTableItem; @@ -44,17 +45,19 @@ class KviTextIconEditor : public KviTalHBox { Q_OBJECT public: - KviTextIconEditor(QWidget * par,KviTextIcon * icon,KviTextIconTableItem* item); + KviTextIconEditor(QWidget * par); ~KviTextIconEditor(); protected: - KviTextIconTableItem *m_pTableItem; KviTextIcon *m_pIcon; KviTalPopupMenu *m_pPopup; QToolButton *m_pIconButton; QToolButton *m_pBrowseButton; public: void updateIcon(); - KviTextIcon* icon() { return m_pIcon; }; + void setIcon(KviTextIcon * icon) + { m_pIcon = icon; }; + KviTextIcon* icon() + { return m_pIcon; }; protected slots: void iconSelected(int); void doPopup(); @@ -72,8 +75,31 @@ protected: public: KviTextIcon * icon() { return m_pIcon; }; void setId(int id); - virtual QWidget * createEditor() const; - virtual void setContentFromEditor(QWidget * w); + //virtual QWidget * createEditor() const; + void setContentFromEditor(QWidget * w); +}; + +// +// Yes. It's true. You spend more time to find the function to reimplement in order to get the +// desired behaviour than to think out your REAL algorithm. +// Usually the function to reimplement is somewhere in a very abstract class that you're +// forced to understand and then inherit. IMHO the Qt3 item views were *really* better. +// Let's hope that Trolls improve this. +// +class KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate : public QItemDelegate +{ +protected: + QTableWidget * m_pTableWidget; +public: + KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate(QTableWidget * pTableWidget) + : QItemDelegate(pTableWidget), m_pTableWidget(pTableWidget) {}; + ~KviTextIconQt4ModelViewParadigmIsRidiculouslyComplexAndUglyTableItemDelegate() + {}; +protected: + virtual QWidget * createEditor(QWidget * parent,const QStyleOptionViewItem & option,const QModelIndex & index) const; + virtual void setEditorData(QWidget * editor,const QModelIndex & index) const; + virtual void setModelData(QWidget * editor,QAbstractItemModel * model,const QModelIndex & index) const; + virtual void updateEditorGeometry(QWidget * editor,const QStyleOptionViewItem & option,const QModelIndex & index) const; }; class KviTextIconsOptionsWidget : public KviOptionsWidget |
