src/hbinput/inputwidgets/hbinputcustombuttonlist.cpp
changeset 0 16d8024aca5e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hbinput/inputwidgets/hbinputcustombuttonlist.cpp	Mon Apr 19 14:02:13 2010 +0300
@@ -0,0 +1,207 @@
+/****************************************************************************
+**
+** 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 <QGraphicsLinearLayout>
+#if QT_VERSION >= 0x040600
+#include <QGraphicsDropShadowEffect>
+#endif
+
+#include <hbinputvkbwidget.h>
+#include <hbaction.h>
+#include "hbinputtouchkeypadbutton.h"
+#include "hbinputcustombuttonlist.h"
+#include "hbdialog_p.h"
+
+/// @cond
+
+
+class HbInputCustomButtonListPrivate : public HbDialogPrivate
+{
+public:
+    HbInputCustomButtonListPrivate(HbInputVkbWidget* owner) : mOwner(owner) {};
+    ~HbInputCustomButtonListPrivate() {};
+public:
+    HbInputVkbWidget* mOwner;
+    QList<HbTouchKeypadButton*> mButtonList;
+};
+
+
+
+/// @endcond
+
+/*!
+\deprecated HbInputCustomButtonList::HbInputCustomButtonList(QList<HbAction*>&, HbInputVkbWidget*, QGraphicsWidget*)
+    is deprecated. HbInputCustomButtonList will be removed.
+*/
+HbInputCustomButtonList::HbInputCustomButtonList(QList<HbAction*>& actionList, HbInputVkbWidget* owner,
+                            QGraphicsWidget* parent)
+    : HbDialog(*new HbInputCustomButtonListPrivate(owner), parent)
+{    
+    Q_D(HbInputCustomButtonList);
+
+    d->setPriority(HbPopupPrivate::VirtualKeyboard + 1);  // Should be shown on top of virtual keyboard.
+
+    QGraphicsLinearLayout *linearLayout = new QGraphicsLinearLayout(Qt::Horizontal);
+
+    QGraphicsWidget* contextWidget = new QGraphicsWidget;
+    linearLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+    linearLayout->setSpacing(0.0);
+    contextWidget->setLayout(linearLayout);
+
+#if QT_VERSION >= 0x040600
+    // Make sure the custom button list never steals focus.
+    setFlag(QGraphicsItem::ItemIsPanel, true);
+    setActive(false);
+
+    // enable drop shadow for the preview pane
+// Effect deletion is crashing -> Effect temporarily removed
+//    QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
+//    effect->setBlurRadius(8);
+//    setGraphicsEffect(effect);
+#endif
+
+    setContentWidget(contextWidget);
+
+    // set default values for popup
+    setTimeout(HbDialog::NoTimeout);
+    layout()->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+    setBackgroundFaded(false);
+    setDismissPolicy(TapAnywhere);
+    setModal(false);
+
+    updateActions(actionList);
+}
+
+/*!
+\deprecated HbInputCustomButtonList::~HbInputCustomButtonList()
+    is deprecated. HbInputCustomButtonList will be removed.
+*/
+HbInputCustomButtonList::~HbInputCustomButtonList()
+{  
+}
+
+
+/*!
+\deprecated HbInputCustomButtonList::updateActions(QList<HbAction*>&)
+    is deprecated. HbInputCustomButtonList will be removed.
+*/
+void HbInputCustomButtonList::updateActions(QList<HbAction*>& newActions)
+{
+    Q_D(HbInputCustomButtonList);
+
+    QGraphicsLinearLayout* layout = static_cast<QGraphicsLinearLayout*>(contentWidget()->layout());
+    int j = 0;
+
+    // create new buttons
+    for(int i=0; i<newActions.count(); i++)
+    {     
+        HbTouchKeypadButton* button = 0;
+
+        if (newActions.at(i)->isVisible()) {
+            if (j < d->mButtonList.count()){
+                // update old button
+                button = d->mButtonList.at(j);
+                button->disconnect(SIGNAL(clicked()));
+                button->setText(newActions.at(i)->text());
+                button->setIcon(newActions.at(i)->icon());
+            } else {
+                // create new button
+                if (!newActions.at(i)->icon().isNull()) {
+                    button = new HbTouchKeypadButton(d->mOwner, newActions.at(i)->icon(), newActions.at(i)->text(), this);
+                } else {
+                    button = new HbTouchKeypadButton(d->mOwner, newActions.at(i)->text(), this);
+                }
+                d->mButtonList.append(button);
+                layout->addItem(button);
+            }
+
+            button->setButtonType(HbTouchKeypadButton::HbTouchButtonNormal);
+            button->setBackgroundAttributes(HbTouchKeypadButton::HbTouchButtonReleased);
+            if (newActions.at(i)->text().isEmpty()) {
+				button->setObjectName( "Custom button list button " + QString::number(i));
+            } else {
+                button->setObjectName( "Custom button list " + newActions.at(i)->text());
+            }
+            button->setToolTip(newActions.at(i)->toolTip());
+            button->setEnabled(newActions.at(i)->isEnabled()); 
+            
+            // make click connection
+            connect(button, SIGNAL(clicked()), newActions.at(i), SLOT(trigger()));
+            ++j;
+        }
+    }
+
+    // remove extra buttons from layout
+    while(j < d->mButtonList.count()) {
+        HbTouchKeypadButton* button = d->mButtonList.at(j);
+        d->mButtonList.removeAt(j);
+        layout->removeItem(button);
+        button->disconnect(SIGNAL(clicked()));
+        delete button;
+    }
+}
+
+/*!
+\deprecated HbInputCustomButtonList::count()
+    is deprecated. HbInputCustomButtonList will be removed.
+*/
+int HbInputCustomButtonList::count()
+{
+    Q_D(HbInputCustomButtonList);
+    return d->mButtonList.count();
+}
+
+/*!
+\deprecated HbInputCustomButtonList::orientation()
+    is deprecated. HbInputCustomButtonList will be removed.
+*/
+Qt::Orientation HbInputCustomButtonList::orientation()
+{
+    return static_cast<QGraphicsLinearLayout*>(contentWidget()->layout())->orientation();
+}
+
+/*!
+\deprecated HbInputCustomButtonList::setOrientation(Qt::Orientation)
+    is deprecated. HbInputCustomButtonList will be removed.
+*/
+void HbInputCustomButtonList::setOrientation(Qt::Orientation orientation)
+{
+    static_cast<QGraphicsLinearLayout*>(contentWidget()->layout())->setOrientation(orientation);
+    updatePrimitives();
+}
+
+/*!
+\deprecated HbInputCustomButtonList::setGeometry(const QRectF&)
+    is deprecated. HbInputCustomButtonList will be removed.
+
+\reimp
+*/
+void HbInputCustomButtonList::setGeometry(const QRectF & rect)
+{
+    // Override HbDialog setGeometry, which would center the widget.
+    QGraphicsWidget::setGeometry(rect);
+} 
+
+// End of file