src/hbinput/inputwidgets/hbinputsmileypicker.cpp
changeset 0 16d8024aca5e
child 5 627c4a0fd0e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hbinput/inputwidgets/hbinputsmileypicker.cpp	Mon Apr 19 14:02:13 2010 +0300
@@ -0,0 +1,165 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (developer.feedback@nokia.com)
+**
+** This file is part of the HbInput module of the UI Extensions for Mobile.
+**
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at developer.feedback@nokia.com.
+**
+****************************************************************************/
+
+#include <hbgridview.h>
+#include <hbview.h>
+#include <hbwidget.h>
+#include <QStandardItemModel>
+#include <QStandardItem>
+#include <QFileInfoList>
+#include <QDir>
+
+#include <HbMainWindow>
+#include <HbFrameItem>
+#include <HbFrameDrawer>
+#include <hbdialog_p.h>
+
+#include "hbinputsmileypicker.h"
+
+/// @cond
+
+class HbInputSmileyPickerPrivate: public HbDialogPrivate
+{
+    Q_DECLARE_PUBLIC(HbInputSmileyPicker)
+
+public:
+    HbInputSmileyPickerPrivate(int rows, int columns);
+    ~HbInputSmileyPickerPrivate();
+
+    void getSmilies(const QStringList& smileys);
+    void _q_activated(const QModelIndex& index);
+
+    // member variables.
+    HbGridView *mView;
+    QStandardItemModel *mModel;
+};
+
+HbInputSmileyPickerPrivate::HbInputSmileyPickerPrivate(int rows, int columns)
+:mView(0), mModel(0)
+{
+    Q_Q(HbInputSmileyPicker);
+    // we should make sure that it comes above vkb
+    setPriority(HbPopupPrivate::VirtualKeyboard + 1);
+
+    // create a view and set the rows and columns.
+    mView = new HbGridView(q);
+    mView->setRowCount(rows);
+    mView->setColumnCount(columns);
+    mView->setScrollDirections(Qt::Horizontal);
+    mView->setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
+    mModel = new QStandardItemModel(q);
+    mView->setModel(mModel);
+}
+
+HbInputSmileyPickerPrivate::~HbInputSmileyPickerPrivate()
+{
+}
+
+void HbInputSmileyPickerPrivate::getSmilies(const QStringList& smileys)
+{
+    mModel->clear();
+    QStandardItem* item = 0;
+    foreach (QString smiley, smileys) {
+        item = new QStandardItem();
+        item->setData(HbIcon(smiley), Qt::DecorationRole);
+        mModel->appendRow(item);
+    }
+}
+
+void HbInputSmileyPickerPrivate::_q_activated(const QModelIndex& index)
+{
+    Q_Q(HbInputSmileyPicker);
+    if (!hidingInProgress) {
+        HbIcon smileyIcon = index.model()->data(index, Qt::DecorationRole).value<HbIcon>();
+        emit q->selected(smileyIcon.iconName());
+        q->hide();
+    }
+}
+
+/// @endcond
+
+/*!
+@proto
+@hbinput
+\class HbInputSmileyPicker
+\brief Smiley picker widget
+
+Smiley picker is a dialog containing a grid of emoticons in the form of icons.
+It emits selected signal with corresponding emoticon text once a smiley is clicked.
+
+\sa HbDialog
+\sa HbGridView
+*/
+HbInputSmileyPicker::HbInputSmileyPicker(int rows, int columns, QGraphicsItem *parent, QStringList smileys)
+    : HbDialog(*new HbInputSmileyPickerPrivate(rows, columns), parent)
+{
+    Q_D(HbInputSmileyPicker);
+
+#if QT_VERSION >= 0x040600
+    // Make sure the smiley picker never steals focus.
+    setFlag(QGraphicsItem::ItemIsPanel, true);
+    setActive(false);
+#endif
+
+    // set dialog properties
+    setFocusPolicy(Qt::ClickFocus);
+    setDismissPolicy(TapAnywhere);
+    setBackgroundFaded(false);
+    setTimeout(NoTimeout);
+    setContentWidget(d->mView);
+
+    // extract smilies.
+    d->getSmilies(smileys);
+
+    // connect signals
+    connect(d->mView, SIGNAL(activated(QModelIndex )), this, SLOT(_q_activated(QModelIndex )));
+}
+
+/*!
+Destructs the object.
+*/
+HbInputSmileyPicker::~HbInputSmileyPicker()
+{
+}
+
+/*!
+This a virtual functions in QGraphicsWidget. It is called whenever the smiley picker widgets is shown. 
+Here in this function we are are scrolling to a position where we can see 
+first row and column
+*/
+void HbInputSmileyPicker::showEvent( QShowEvent * event )
+{
+    Q_D(HbInputSmileyPicker);
+    QStandardItem *item = d->mModel->item(0);
+    // when ever we do a show smiley picker.
+    // we should scroll back to the first position.
+    // otherwise we will show the smiley grid in previous state.
+    if (item) {
+        d->mView->scrollTo(item->index());
+    }
+    HbDialog::showEvent(event);
+}
+
+#include "moc_hbinputsmileypicker.cpp"