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();
104 exclude << QLatin1String(
"(c)") << QLatin1String(
"(C)") << QLatin1String(
">:-(") << QLatin1String(
">:(") << QLatin1String(
"(B)") << QLatin1String(
"(b)") << QLatin1String(
"(P)") << QLatin1String(
"(p)");
105 exclude << QLatin1String(
"(O)") << QLatin1String(
"(o)") << QLatin1String(
"(D)") << QLatin1String(
"(d)") << QLatin1String(
"(E)") << QLatin1String(
"(e)") << QLatin1String(
"(K)") << QLatin1String(
"(k)");
106 exclude << QLatin1String(
"(I)") << QLatin1String(
"(i)") << QLatin1String(
"(L)") << QLatin1String(
"(l)") << QLatin1String(
"(8)") << QLatin1String(
"(T)") << QLatin1String(
"(t)") << QLatin1String(
"(G)");
107 exclude << QLatin1String(
"(g)") << QLatin1String(
"(F)") << QLatin1String(
"(f)") << QLatin1String(
"(H)");
108 exclude << QLatin1String(
"8)") << QLatin1String(
"(N)") << QLatin1String(
"(n)") << QLatin1String(
"(Y)") << QLatin1String(
"(y)") << QLatin1String(
"(U)") << QLatin1String(
"(u)") << QLatin1String(
"(W)") << QLatin1String(
"(w)");
110 QHash<QString, QStringList>::const_iterator end = list.constEnd();
111 for ( QHash<QString, QStringList>::const_iterator it = list.constBegin(); it != end; ++it ) {
112 if (!exclude.contains(it.value().first()))
113 new EmoticonTextEditItem( it.value().first(), it.key(), d->listEmoticon );
116 d->listEmoticon->setIconSize( QSize( 32, 32 ) );
120 void EmoticonTextEditSelector::slotMouseOverItem(QListWidgetItem* item)
122 item->setSelected(
true );
123 if ( !d->listEmoticon->hasFocus() ) {
124 d->listEmoticon->setFocus();
129 void EmoticonTextEditSelector::slotEmoticonClicked(QListWidgetItem*item)
134 EmoticonTextEditItem *itemEmoticon =
static_cast<EmoticonTextEditItem*
>( item );
136 emit itemSelected ( itemEmoticon->text() );
137 if ( isVisible() && parentWidget() &&
138 parentWidget()->inherits(
"QMenu" ) ) {
139 parentWidget()->close();