aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/modules/options/optw_texticons.cpp224
-rw-r--r--src/modules/options/optw_texticons.h60
2 files changed, 68 insertions, 216 deletions
diff --git a/src/modules/options/optw_texticons.cpp b/src/modules/options/optw_texticons.cpp
index bf9b7aa27..eb6a53bc1 100644
--- a/src/modules/options/optw_texticons.cpp
+++ b/src/modules/options/optw_texticons.cpp
@@ -35,154 +35,6 @@
-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 = 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);
-}
-
-
-KviTextIconEditor::~KviTextIconEditor()
-{
-
-}
-
-void KviTextIconEditor::doPopup()
-{
- if(!m_pPopup)
- {
- m_pPopup = new KviTalPopupMenu(this);
- KviIconWidget * iw = new KviIconWidget(m_pPopup);
- connect(iw,SIGNAL(selected(int)),this,SLOT(iconSelected(int)));
- m_pPopup->insertItem(iw);
- }
- m_pPopup->popup(QCursor::pos());
-}
-
-void KviTextIconEditor::iconSelected(int id)
-{
- if(!m_pIcon)
- return;
- m_pIcon->setId(id);
- updateIcon();
-}
-
-void KviTextIconEditor::chooseFromFile()
-{
- QString szFile;
- KviFileDialog::askForOpenFileName(szFile,"Choose icon filename",QString::null,"*.png","options");
- if(!szFile.isEmpty())
- {
- if(g_pIconManager->getPixmap(szFile))
- {
- m_pIcon->setFilename(szFile);
-// qDebug("%s %s %i |%s| %p",__FILE__,__FUNCTION__,__LINE__,m_pIcon->filename().utf8().data(),m_pIcon);
- updateIcon();
- }
- }
-}
-
-void KviTextIconEditor::updateIcon()
-{
- if(!m_pIcon)
- return;
- QPixmap* pix=m_pIcon->pixmap();
- if(pix) m_pIconButton->setPixmap(*pix);
-}
-
KviTextIconTableItem::KviTextIconTableItem(QTableWidget * t,KviTextIcon * icon)
: QTableWidgetItem(QString::null,Qt::ItemIsEditable)
{
@@ -206,23 +58,14 @@ void KviTextIconTableItem::setId(int id)
if(pix) setIcon(QIcon(*pix));
}
-/*QWidget * KviTextIconTableItem::createEditor() const
-{
- return new KviTextIconEditor(tableWidget()->viewport(),m_pIcon,(KviTextIconTableItem*)this);
-}*/
-
-void KviTextIconTableItem::setContentFromEditor(QWidget * w)
-{
- if(w->inherits("KviTextIconEditor"))
- {
- QPixmap* pix=m_pIcon->pixmap();
- if(pix) setIcon(QIcon(*pix));
- }
-}
KviTextIconsOptionsWidget::KviTextIconsOptionsWidget(QWidget * parent)
: KviOptionsWidget(parent)
{
+ m_pBox=0;
+ m_pPopup=0;
+ m_iLastEditedRow=-1;
+
setObjectName("texticons_options_widget");
createLayout(2,2);
@@ -234,9 +77,6 @@ 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())
{
@@ -262,23 +102,75 @@ KviTextIconsOptionsWidget::KviTextIconsOptionsWidget(QWidget * parent)
m_pDel->setEnabled(false);
connect(m_pTable,SIGNAL(itemSelectionChanged()),this,SLOT(itemSelectionChanged()));
+ connect(m_pTable,SIGNAL(itemClicked(QTableWidgetItem *)),this,SLOT(itemClicked(QTableWidgetItem *)));
}
KviTextIconsOptionsWidget::~KviTextIconsOptionsWidget()
{
}
+
+void KviTextIconsOptionsWidget::doPopup()
+{
+ if(!m_pPopup)
+ {
+ m_pPopup = new KviTalPopupMenu(this);
+ KviIconWidget * iw = new KviIconWidget(m_pPopup);
+ connect(iw,SIGNAL(selected(int)),this,SLOT(iconSelected(int)));
+ m_pPopup->insertItem(iw);
+ }
+ m_pPopup->popup(QCursor::pos());
+}
+
+void KviTextIconsOptionsWidget::iconSelected(int id)
+{
+ m_pItem->icon()->setId(id);
+ m_pItem->setIcon(QIcon(*m_pItem->icon()->pixmap()));
+}
+
+void KviTextIconsOptionsWidget::chooseFromFile()
+{
+ QString szFile;
+ KviFileDialog::askForOpenFileName(szFile,"Choose icon filename",QString::null,"*.png","options");
+ if(!szFile.isEmpty())
+ {
+ if(g_pIconManager->getPixmap(szFile))
+ {
+ m_pItem->icon()->setFilename(szFile);
+ m_pItem->setIcon(QIcon(*m_pItem->icon()->pixmap()));
+ }
+ }
+}
void KviTextIconsOptionsWidget::itemSelectionChanged()
{
int i = m_pTable->currentRow();
m_pDel->setEnabled(i >= 0 && i < m_pTable->rowCount());
}
+void KviTextIconsOptionsWidget::itemClicked(QTableWidgetItem *i)
+{
+ if (i->column()!=1) return;
+ if (m_iLastEditedRow==i->row()) return;
+ if (m_pBox)
+ delete m_pBox;
+ m_pBox=new KviTalHBox(0);
+ m_pItem=(KviTextIconTableItem *)i;
+ QToolButton *iconButton=new QToolButton(m_pBox);
+ QToolButton *browseButton=new QToolButton(m_pBox);
+ browseButton->setText("...");
+ m_pBox->setSpacing(0);
+ m_pBox->setMargin(0);
+ iconButton->setIcon(QIcon(*g_pIconManager->getSmallIcon(KVI_SMALLICON_THEME)));
+ m_pTable->setCellWidget(i->row(),1,m_pBox);
+ connect(iconButton,SIGNAL(clicked()),this,SLOT(doPopup()));
+ connect(browseButton,SIGNAL(clicked()),this,SLOT(chooseFromFile()));
+ m_iLastEditedRow=i->row();
+
+}
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->setItem(m_pTable->rowCount() - 1,0,new QTableWidgetItem(__tr2qs_ctx("unnamed","options")));
+ m_pTable->item(m_pTable->rowCount() - 1,0)->setText(__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 171d2b498..79e7cc24a 100644
--- a/src/modules/options/optw_texticons.h
+++ b/src/modules/options/optw_texticons.h
@@ -31,7 +31,6 @@
#include <QToolButton>
#include <QTableWidget>
#include <QTableWidgetItem>
-#include <QItemDelegate>
class KviTextIconTableItem;
@@ -40,30 +39,6 @@ class KviTextIconTableItem;
#define KVI_OPTIONS_WIDGET_PARENT_KviTextIconsOptionsWidget KviToolsOptionsWidget
#define KVI_OPTIONS_WIDGET_KEYWORDS_KviTextIconsOptionsWidget __tr2qs_no_lookup("smileys,emoticons")
-
-class KviTextIconEditor : public KviTalHBox
-{
- Q_OBJECT
-public:
- KviTextIconEditor(QWidget * par);
- ~KviTextIconEditor();
-protected:
- KviTextIcon *m_pIcon;
- KviTalPopupMenu *m_pPopup;
- QToolButton *m_pIconButton;
- QToolButton *m_pBrowseButton;
-public:
- void updateIcon();
- void setIcon(KviTextIcon * icon)
- { m_pIcon = icon; };
- KviTextIcon* icon()
- { return m_pIcon; };
-protected slots:
- void iconSelected(int);
- void doPopup();
- void chooseFromFile();
-};
-
class KviTextIconTableItem : public QTableWidgetItem
{
friend class KviTextIconsOptionsWidget;
@@ -75,31 +50,7 @@ protected:
public:
KviTextIcon * icon() { return m_pIcon; };
void setId(int id);
- //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
@@ -110,14 +61,23 @@ public:
~KviTextIconsOptionsWidget();
protected:
QTableWidget * m_pTable;
+ int m_iLastEditedRow;
+ KviTextIconTableItem *m_pItem;
QPushButton * m_pAdd;
QPushButton * m_pDel;
+ KviTalPopupMenu *m_pPopup;
+ KviTalHBox *m_pBox;
public:
virtual void commit();
protected slots:
void itemSelectionChanged();
+ void itemClicked(QTableWidgetItem *i);
void addClicked();
void delClicked();
+
+ void iconSelected(int);
+ void doPopup();
+ void chooseFromFile();
};
#endif //!_OPTW_TEXTICONS_H_