21 #include "emoticontexteditselector.h"
24 #include <kemoticonstheme.h>
26 #include <QListWidget>
28 #include <QHBoxLayout>
31 K_GLOBAL_STATIC( KEmoticons, sEmoticons )
33 using namespace KPIMTextEdit;
35 EmoticonTextEditItem::EmoticonTextEditItem(const QString &emoticonText, const QString &pixmapPath, QListWidget *parent)
36 : QListWidgetItem( parent )
39 mPixmapPath = pixmapPath;
40 QPixmap p( mPixmapPath );
44 if ( p.width() > 32 || p.height() > 32 ) {
45 p = p.scaled( QSize( 32, 32 ), Qt::KeepAspectRatio );
52 QString EmoticonTextEditItem::text()
const
57 QString EmoticonTextEditItem::pixmapPath()
const
62 class EmoticonTextEditSelector::EmoticonTextEditSelectorPrivate
65 EmoticonTextEditSelectorPrivate() {
67 QListWidget *listEmoticon;
70 EmoticonTextEditSelector::EmoticonTextEditSelector( QWidget * parent )
71 :QWidget( parent ), d( new EmoticonTextEditSelectorPrivate() )
73 QHBoxLayout *lay =
new QHBoxLayout(
this );
75 lay->setContentsMargins( 0, 0, 0, 0 );
76 d->listEmoticon =
new QListWidget(
this );
77 lay->addWidget( d->listEmoticon );
78 d->listEmoticon->setViewMode( QListView::IconMode );
79 d->listEmoticon->setSelectionMode( QAbstractItemView::SingleSelection );
80 d->listEmoticon->setMouseTracking(
true );
81 d->listEmoticon->setDragEnabled(
false );
82 connect( d->listEmoticon, SIGNAL(itemEntered(QListWidgetItem*)),
83 this, SLOT(slotMouseOverItem(QListWidgetItem*)) );
84 connect( d->listEmoticon, SIGNAL(itemClicked(QListWidgetItem*)),
85 this, SLOT(slotEmoticonClicked(QListWidgetItem*)) );
88 EmoticonTextEditSelector::~EmoticonTextEditSelector()
93 void EmoticonTextEditSelector::slotCreateEmoticonList()
95 d->listEmoticon->clear();
96 static QString cachedEmoticonsThemeName;
97 if ( cachedEmoticonsThemeName.isEmpty() ) {
98 cachedEmoticonsThemeName = KEmoticons::currentThemeName();
100 const QHash<QString, QStringList> list = sEmoticons->theme( cachedEmoticonsThemeName ).emoticonsMap();
102 QHash<QString, QStringList>::const_iterator end = list.constEnd();
103 for ( QHash<QString, QStringList>::const_iterator it = list.constBegin(); it != end; ++it ) {
104 new EmoticonTextEditItem( it.value().first(), it.key(), d->listEmoticon );
107 d->listEmoticon->setIconSize( QSize( 32, 32 ) );
111 void EmoticonTextEditSelector::slotMouseOverItem(QListWidgetItem* item)
113 item->setSelected(
true );
114 if ( !d->listEmoticon->hasFocus() ) {
115 d->listEmoticon->setFocus();
120 void EmoticonTextEditSelector::slotEmoticonClicked(QListWidgetItem*item)
125 EmoticonTextEditItem *itemEmoticon =
static_cast<EmoticonTextEditItem*
>( item );
127 emit itemSelected ( itemEmoticon->text() );
128 if ( isVisible() && parentWidget() &&
129 parentWidget()->inherits(
"QMenu" ) ) {
130 parentWidget()->close();