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,
36 const QString &pixmapPath,
38 : QListWidgetItem( parent )
41 mPixmapPath = pixmapPath;
42 QPixmap p( mPixmapPath );
46 if ( p.width() > 32 || p.height() > 32 ) {
47 p = p.scaled( QSize( 32, 32 ), Qt::KeepAspectRatio );
54 QString EmoticonTextEditItem::text()
const
59 QString EmoticonTextEditItem::pixmapPath()
const
64 class EmoticonTextEditSelector::EmoticonTextEditSelectorPrivate
67 EmoticonTextEditSelectorPrivate()
70 QListWidget *listEmoticon;
73 EmoticonTextEditSelector::EmoticonTextEditSelector( QWidget *parent )
74 : QWidget( parent ), d( new EmoticonTextEditSelectorPrivate() )
76 QHBoxLayout *lay =
new QHBoxLayout(
this );
78 lay->setContentsMargins( 0, 0, 0, 0 );
79 d->listEmoticon =
new QListWidget(
this );
80 lay->addWidget( d->listEmoticon );
81 d->listEmoticon->setViewMode( QListView::IconMode );
82 d->listEmoticon->setSelectionMode( QAbstractItemView::SingleSelection );
83 d->listEmoticon->setMouseTracking(
true );
84 d->listEmoticon->setDragEnabled(
false );
85 connect( d->listEmoticon, SIGNAL(itemEntered(QListWidgetItem*)),
86 this, SLOT(slotMouseOverItem(QListWidgetItem*)) );
87 connect( d->listEmoticon, SIGNAL(itemClicked(QListWidgetItem*)),
88 this, SLOT(slotEmoticonClicked(QListWidgetItem*)) );
91 EmoticonTextEditSelector::~EmoticonTextEditSelector()
96 void EmoticonTextEditSelector::slotCreateEmoticonList()
98 d->listEmoticon->clear();
99 static QString cachedEmoticonsThemeName;
100 if ( cachedEmoticonsThemeName.isEmpty() ) {
101 cachedEmoticonsThemeName = KEmoticons::currentThemeName();
103 const QHash<QString, QStringList> list =
104 sEmoticons->theme( cachedEmoticonsThemeName ).emoticonsMap();
108 exclude << QLatin1String(
"(c)") << QLatin1String(
"(C)") << QLatin1String(
">:-(") << QLatin1String(
">:(") << QLatin1String(
"(B)") << QLatin1String(
"(b)") << QLatin1String(
"(P)") << QLatin1String(
"(p)");
109 exclude << QLatin1String(
"(O)") << QLatin1String(
"(o)") << QLatin1String(
"(D)") << QLatin1String(
"(d)") << QLatin1String(
"(E)") << QLatin1String(
"(e)") << QLatin1String(
"(K)") << QLatin1String(
"(k)");
110 exclude << QLatin1String(
"(I)") << QLatin1String(
"(i)") << QLatin1String(
"(L)") << QLatin1String(
"(l)") << QLatin1String(
"(8)") << QLatin1String(
"(T)") << QLatin1String(
"(t)") << QLatin1String(
"(G)");
111 exclude << QLatin1String(
"(g)") << QLatin1String(
"(F)") << QLatin1String(
"(f)") << QLatin1String(
"(H)");
112 exclude << QLatin1String(
"8)") << QLatin1String(
"(N)") << QLatin1String(
"(n)") << QLatin1String(
"(Y)") << QLatin1String(
"(y)") << QLatin1String(
"(U)") << QLatin1String(
"(u)") << QLatin1String(
"(W)") << QLatin1String(
"(w)");
114 QHash<QString, QStringList>::const_iterator end = list.constEnd();
115 for ( QHash<QString, QStringList>::const_iterator it = list.constBegin(); it != end; ++it ) {
116 if (!exclude.contains(it.value().first()))
117 new EmoticonTextEditItem( it.value().first(), it.key(), d->listEmoticon );
120 d->listEmoticon->setIconSize( QSize( 32, 32 ) );
123 void EmoticonTextEditSelector::slotMouseOverItem( QListWidgetItem *item )
125 item->setSelected(
true );
126 if ( !d->listEmoticon->hasFocus() ) {
127 d->listEmoticon->setFocus();
131 void EmoticonTextEditSelector::slotEmoticonClicked( QListWidgetItem *item )
136 EmoticonTextEditItem *itemEmoticon =
static_cast<EmoticonTextEditItem*
>( item );
138 emit itemSelected ( itemEmoticon->text() );
139 if ( isVisible() && parentWidget() &&
140 parentWidget()->inherits(
"QMenu" ) ) {
141 parentWidget()->close();