aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2008-04-11 14:36:16 +0000
committerGravatar Szymon Tomasz Stefanek2008-04-11 14:36:16 +0000
commite1d9a7fea933ad36c7515186f12d8a32e414fc38 (patch)
treea1dfb9d1e1566f28e5cc12781e81debfaa470bb1 /src
parentFix endianness issues on MacOSX (diff)
downloadKVIrc-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')
-rw-r--r--src/modules/options/optw_texticons.cpp113
-rw-r--r--src/modules/options/optw_texticons.h36
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