aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Noldor2008-05-02 16:29:48 +0000
committerGravatar Noldor2008-05-02 16:29:48 +0000
commit796a3344bbec9502c2108c2a9e2aadeb74cad2ac (patch)
treeff1b215b7d961b244f77503d8ebf8258439dc95a /src/modules
parentfixed patch for doxygen and added it in the docs (diff)
downloadKVIrc-796a3344bbec9502c2108c2a9e2aadeb74cad2ac.tar.gz
KVIrc-796a3344bbec9502c2108c2a9e2aadeb74cad2ac.tar.bz2
KVIrc-796a3344bbec9502c2108c2a9e2aadeb74cad2ac.zip
rewriting of addon "listbox" with QItemDelegate (wip)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1657 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/addon/managementdialog.cpp110
-rw-r--r--src/modules/addon/managementdialog.h25
2 files changed, 95 insertions, 40 deletions
diff --git a/src/modules/addon/managementdialog.cpp b/src/modules/addon/managementdialog.cpp
index fa522ba6a..ad094d80d 100644
--- a/src/modules/addon/managementdialog.cpp
+++ b/src/modules/addon/managementdialog.cpp
@@ -49,10 +49,14 @@
#include <QLineEdit>
#include <QLabel>
#include <QFrame>
+#include <QAbstractTextDocumentLayout>
// FIXME: Qt4 #include <QHeaderView>
#include <q3header.h>
+
+
+
KviScriptManagementDialog * KviScriptManagementDialog::m_pInstance = 0;
extern QRect g_rectManagementDialogGeometry;
@@ -63,8 +67,44 @@ extern QRect g_rectManagementDialogGeometry;
#define LVI_MINIMUM_TEXT_WIDTH 300
#define LVI_MINIMUM_CELL_WIDTH (LVI_MINIMUM_TEXT_WIDTH + LVI_BORDER + LVI_ICON_SIZE + LVI_SPACING + LVI_BORDER)
-KviScriptAddonListViewItem::KviScriptAddonListViewItem(KviTalListView * v,KviKvsScriptAddon * a)
-: KviTalListViewItem(v,"")
+
+void KviScriptAddonDelegate::paint( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+ painter->save();
+ if (option.state & QStyle::State_Selected)
+ {
+ QPalette pal=option.palette;
+ QBrush brush=pal.highlight();
+ QColor col=brush.color();
+ col.setAlpha(127);
+ brush.setColor(col);
+ painter->fillRect(option.rect,brush);
+ }
+ QString text=index.data(Qt::DisplayRole).toString();
+ QPixmap pixmap;
+ QRect decorationRect;
+ QVariant value = index.data(Qt::DecorationRole);
+ QStyle::State state=option.state;
+ QRect rect=option.rect;
+ int afterIcon = LVI_BORDER + LVI_ICON_SIZE + LVI_SPACING;
+ QIcon ico=QIcon(value.value<QIcon>());
+ painter->drawPixmap(option.rect.x()+LVI_BORDER,option.rect.y()+LVI_BORDER,ico.pixmap(LVI_ICON_SIZE,LVI_ICON_SIZE));
+ QTextDocument doc;
+ doc.setHtml( text );
+ painter->translate(option.rect.x()+afterIcon,option.rect.y()+LVI_BORDER);
+ doc.setTextWidth(option.rect.width()-10);
+ QRect cliprect=QRect(QPoint(0,0),QSize(option.rect.width()-afterIcon,option.rect.height()-(LVI_BORDER*2)-4));
+ doc.drawContents(painter, cliprect);
+ painter->restore();
+}
+
+QSize KviScriptAddonDelegate::sizeHint( const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+ return QSize(300,40);
+}
+
+KviScriptAddonListViewItem::KviScriptAddonListViewItem(QListWidget * v,KviKvsScriptAddon * a)
+: QListWidgetItem(v)
{
m_pAddon = new KviKvsScriptAddon(*a);
m_pListView = v;
@@ -79,28 +119,27 @@ KviScriptAddonListViewItem::KviScriptAddonListViewItem(KviTalListView * v,KviKvs
t += "<br><nobr><font size=\"-1\">";
t += a->description();
t += "</font></nobr>";
- m_szKey = a->visibleName().upper();
- m_pText = new QTextDocument();
- m_pText->setHtml(t);
- m_pText->setDefaultFont(v->font());
+
+ setText(t);
QPixmap * p = a->icon();
- m_pIcon = p ? new QPixmap(*p) : new QPixmap(LVI_ICON_SIZE,LVI_ICON_SIZE);
+ if (p) setIcon(*p);
+ else setIcon(QPixmap(LVI_ICON_SIZE,LVI_ICON_SIZE));
}
KviScriptAddonListViewItem::~KviScriptAddonListViewItem()
{
- delete m_pIcon;
- delete m_pText;
+
delete m_pAddon;
}
-
+/*
QString KviScriptAddonListViewItem::key(int,bool) const
{
return m_szKey;
}
-
+*/
void KviScriptAddonListViewItem::setup()
{
+/*
KviTalListViewItem::setup();
int iWidth = m_pListView->visibleWidth();
if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
@@ -108,10 +147,12 @@ void KviScriptAddonListViewItem::setup()
int iHeight = m_pText->size().height() + (2 * LVI_BORDER);
if(iHeight < (LVI_ICON_SIZE + (2 * LVI_BORDER)))iHeight = LVI_ICON_SIZE + (2 * LVI_BORDER);
setHeight(iHeight+2);
-}
+*/
+ }
void KviScriptAddonListViewItem::paintCell(QPainter * p,const QColorGroup & cg,int column,int width,int align)
{
+ /*
if (isSelected())
{
QColor col(m_pListView->palette().highlight());
@@ -125,23 +166,27 @@ void KviScriptAddonListViewItem::paintCell(QPainter * p,const QColorGroup & cg,i
p->translate(afterIcon,LVI_BORDER);
m_pText->setPageSize(QSizeF(www,height() - (LVI_BORDER * 2)));
m_pText->drawContents(p);
+ */
}
KviScriptAddonListView::KviScriptAddonListView(QWidget * pParent)
-: KviListView(pParent)
+: QListWidget (pParent)
{
- QPixmap * p = g_pIconManager->getImage("kvi_dialog_addons.png");
+/* QPixmap * p = g_pIconManager->getImage("kvi_dialog_addons.png");
if(p)setBackgroundOverlayPixmap(p,Qt::AlignRight | Qt::AlignBottom);
- setSelectionMode(Single);
-
+*/
+ setSelectionMode(QAbstractItemView::SingleSelection);
+ int iWidth = width();
+ if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
+
// FIXME: doesn't work in Qt4
- header()->hide();
-
+/*
int iWidth = visibleWidth();
if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
addColumn("",iWidth);
- setSorting(0,true);
+ */
+ setSortingEnabled(true);
}
KviScriptAddonListView::~KviScriptAddonListView()
@@ -150,10 +195,10 @@ KviScriptAddonListView::~KviScriptAddonListView()
void KviScriptAddonListView::resizeEvent(QResizeEvent * e)
{
- KviListView::resizeEvent(e);
- int iWidth = visibleWidth();
- if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
- setColumnWidth(0,iWidth);
+ QListWidget::resizeEvent(e);
+// int iWidth = visibleWidth();
+// if(iWidth < LVI_MINIMUM_CELL_WIDTH)iWidth = LVI_MINIMUM_CELL_WIDTH;
+// setColumnWidth(0,iWidth);
}
@@ -182,6 +227,7 @@ KviScriptManagementDialog::KviScriptManagementDialog(QWidget * p)
lb->setAlignment(Qt::AlignBottom | Qt::AlignRight);
*/
m_pListView = new KviScriptAddonListView(this);
+ m_pListView->setItemDelegate(new KviScriptAddonDelegate(m_pListView));
g->addMultiCellWidget(m_pListView,0,10,1,1);
m_pConfigureButton = new QPushButton(__tr2qs("Configure"),this);
@@ -222,11 +268,11 @@ KviScriptManagementDialog::KviScriptManagementDialog(QWidget * p)
g->setColumnStretch(1,1);
fillListView();
-
- currentChanged(0);
- connect(m_pListView,SIGNAL(currentChanged(KviTalListViewItem *)),this,SLOT(currentChanged(KviTalListViewItem *)));
+
+ currentChanged(0,0);
+ connect(m_pListView,SIGNAL(currentItemChanged(QListWidgetItem *,QListWidgetItem *)),this,SLOT(currentChanged(QListWidgetItem *,QListWidgetItem *)));
//currentToolBarChanged();
-
+ m_pListView->setCurrentItem(m_pListView->item(0));
if(g_rectManagementDialogGeometry.y() < 5)
{
g_rectManagementDialogGeometry.setY(5);
@@ -259,9 +305,9 @@ void KviScriptManagementDialog::fillListView()
}
}
-void KviScriptManagementDialog::currentChanged(KviTalListViewItem *)
+void KviScriptManagementDialog::currentChanged(QListWidgetItem *item,QListWidgetItem *)
{
- KviScriptAddonListViewItem * it = (KviScriptAddonListViewItem *)m_pListView->currentItem();
+ KviScriptAddonListViewItem * it = (KviScriptAddonListViewItem *)item;
if(!it)
{
m_pConfigureButton->setEnabled(false);
@@ -305,7 +351,7 @@ void KviScriptManagementDialog::uninstallScript()
KviKvsScriptAddonManager::instance()->unregisterAddon(it->addon()->name(),g_pActiveWindow);
fillListView();
- currentChanged(0);
+ currentChanged(0,0);
}
void KviScriptManagementDialog::getMoreScripts()
@@ -328,9 +374,9 @@ void KviScriptManagementDialog::installScript()
KviKvsScript::run(szCmd,g_pActiveWindow);
fillListView();
- currentChanged(0);
+ currentChanged(0,0);
- m_pListView->publicUpdateContents();
+ //m_pListView->publicUpdateContents();
//m_pListView->triggerUpdate();
}
diff --git a/src/modules/addon/managementdialog.h b/src/modules/addon/managementdialog.h
index cd5aa82da..5b12c3818 100644
--- a/src/modules/addon/managementdialog.h
+++ b/src/modules/addon/managementdialog.h
@@ -33,32 +33,33 @@
#include <QDialog>
#include <QColor>
#include <QTextDocument>
-
+#include <QListWidget>
+#include <QItemDelegate>
class QPushButton;
class QPixmap;
class KviKvsScriptAddon;
-class KviScriptAddonListViewItem : public KviTalListViewItem
+class KviScriptAddonListViewItem : public QListWidgetItem
{
public:
- KviScriptAddonListViewItem(KviTalListView * v,KviKvsScriptAddon * a);
+ KviScriptAddonListViewItem(QListWidget * v,KviKvsScriptAddon * a);
~KviScriptAddonListViewItem();
protected:
KviKvsScriptAddon * m_pAddon;
QTextDocument * m_pText;
QPixmap * m_pIcon;
- KviTalListView * m_pListView;
+ QListWidget * m_pListView;
QString m_szKey;
public:
KviKvsScriptAddon * addon(){ return m_pAddon; };
protected:
- virtual QString key(int,bool) const;
+ //virtual QString key(int,bool) const;
virtual void paintCell(QPainter * p,const QColorGroup & cg,int column,int width,int align);
virtual void setup();
};
-class KviScriptAddonListView : public KviListView
+class KviScriptAddonListView : public QListWidget
{
Q_OBJECT
public:
@@ -92,7 +93,7 @@ protected:
virtual void showEvent(QShowEvent * e);
virtual void closeEvent(QCloseEvent *e);
protected slots:
- void currentChanged(KviTalListViewItem *i);
+ void currentChanged(QListWidgetItem *i,QListWidgetItem *);
void closeClicked();
void showScriptHelp();
void configureScript();
@@ -100,6 +101,14 @@ protected slots:
void getMoreScripts();
void installScript();
};
-
+class KviScriptAddonDelegate : public QItemDelegate
+{
+public:
+ KviScriptAddonDelegate(QListWidget * pWidget)
+ : QItemDelegate(pWidget){};
+ ~KviScriptAddonDelegate(){};
+ QSize sizeHint(const QStyleOptionViewItem &option,const QModelIndex &index) const;
+ void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
+ };
#endif //!_MANAGEMENTDIALOG_H_