diff -r 594d59766373 -r 7d48bed6ce0c telutils/dialpad/tsrc/dialpadtest/dialpadtestview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telutils/dialpad/tsrc/dialpadtest/dialpadtestview.cpp Tue Aug 31 15:45:17 2010 +0300 @@ -0,0 +1,227 @@ +/*! +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dialpadtestview.h" +#include "dialpad.h" +#include "dialpadkeyhandler.h" + +DialpadTestView::DialpadTestView( HbMainWindow& mainWindow ) : + mMainWindow(mainWindow), mTapOutsideDismiss(0) +{ + setTitle("DialpadTest"); + + // create toolbar with launch dialer action + HbToolBar* tb = toolBar(); + if (mMainWindow.orientation()==Qt::Horizontal) { + tb->setOrientation(mMainWindow.orientation()); + } + + tb->addAction(""); + tb->addAction(HbIcon(":/qtg_large_tb_dialler.svg"),"",this,SLOT(openDialpad())); + tb->addAction(""); + + + // create menu + menu()->addAction("Switch orientation",this,SLOT(switchOrientation())); + connect(&mMainWindow, + SIGNAL(orientationChanged(Qt::Orientation)), + SLOT(onOrientationChange(Qt::Orientation))); + + menu()->addAction("Tap outside dismiss",this,SLOT(setTapOutsideDismiss())); + + // create view widget (recent calls list mockup) + createListWidget(); + + // create dialpad popup + mDialpad = new Dialpad(); // Note! no parent for popup + mDialpad->setCallButtonEnabled(false); + connect(mDialpad,SIGNAL(aboutToClose()),SLOT(onDialpadClosed())); + connect(&mDialpad->editor(),SIGNAL(contentsChanged()), + SLOT(onEditorContentChanged())); + + // create key event handler + mLongPressTimer = new QTimer(this); + mLongPressTimer->setSingleShot(true); + connect(mLongPressTimer,SIGNAL(timeout()),this,SLOT(handleLongKeyPress())); + + mKeyhandler = new DialpadKeyHandler(mDialpad, mMainWindow, this); + + mMainWindow.installEventFilter(this); +} + +DialpadTestView::~DialpadTestView() +{ + delete mDialpad; +} + +void DialpadTestView::openDialpad() +{ + toolBar()->hide(); + setDialpadPosition(); + mDialpad->openDialpad(); +} + +void DialpadTestView::onDialpadClosed() +{ + toolBar()->show(); + mDialpad->editor().setText(QString()); +} + +void DialpadTestView::onEditorContentChanged() +{ + mDialpad->setCallButtonEnabled( + mDialpad->editor().text().length()); +} + +void DialpadTestView::setDialpadPosition() +{ + QRectF screenRect(mMainWindow.layoutRect()); + + if (mMainWindow.orientation() == Qt::Horizontal) { + // dialpad takes half of the screen + mDialpad->setPos(QPointF(screenRect.width()/2, + this->scenePos().y())); + mDialpad->resize(screenRect.width()/2, + (screenRect.height()-scenePos().y())); + } else { + qreal screenHeight = screenRect.height(); + mDialpad->setPos(0, screenHeight/2.25); + mDialpad->resize(screenRect.width(),screenHeight - screenHeight/2.25); + } +} + +void DialpadTestView::switchOrientation() +{ + if (mMainWindow.orientation()==Qt::Vertical) { + mMainWindow.setOrientation(Qt::Horizontal); + + } else { + mMainWindow.setOrientation(Qt::Vertical); + } +} + +void DialpadTestView::onOrientationChange(Qt::Orientation orientation) +{ + if (orientation==Qt::Horizontal) { + toolBar()->setOrientation(Qt::Horizontal); + } + + setDialpadPosition(); +} + +void DialpadTestView::createListWidget() +{ + mListWidget = new HbListWidget(this); + for (int i=0; i<10; i++) { + HbListWidgetItem* listItem = new HbListWidgetItem; + QString logEvent("Log event "); + QString index; index.setNum(i+1); + logEvent.append(index); + listItem->setText(logEvent); + QString phoneNum("+35850123456"); + phoneNum.append(index); + listItem->setSecondaryText(phoneNum); + HbIcon icon(":/qgn_prop_pb_comm_call_large.svg"); + listItem->setIcon(icon); + mListWidget->addItem(listItem); + } + setWidget(mListWidget); +} + +bool DialpadTestView::eventFilter(QObject* watched, QEvent * event) +{ + if (watched!=&mMainWindow) { + return false; + } + + if (event->type() == QEvent::KeyPress) { + QKeyEvent *keyEvent = static_cast(event); + qDebug() << "KeyEventHandler: key press:" << keyEvent->key(); + + mPressedKey = keyEvent->text(); + + if (keyEvent->key()>=Qt::Key_0 && keyEvent->key()<=Qt::Key_9) { + mLongPressTimer->stop(); + mLongPressTimer->start(1500); + } + + return false; + } else if (event->type() == QEvent::KeyRelease) { + QKeyEvent *keyEvent = static_cast(event); + qDebug() << "KeyEventHandler: key release:" << keyEvent->key(); + + mLongPressTimer->stop(); + + if (keyEvent->key()==Qt::Key_Yes || + keyEvent->key()==Qt::Key_Enter) { + handleDial(); + } + + return false; + } + + return false; +} + +bool DialpadTestView::event(QEvent * event) +{ + if (event->type() == QEvent::LayoutDirectionChange) { + setDialpadPosition(); + } + + return HbView::event(event); +} + +void DialpadTestView::handleLongKeyPress() +{ + QString msg; + msg.append("Long press: "); + msg.append(mPressedKey); + + HbMessageBox::information(msg); +} + +void DialpadTestView::handleDial() +{ + QString msg; + if (mDialpad->editor().text().length()) { + msg.append("Dialing to number: "); + msg.append(mDialpad->editor().text()); + } else { + msg.append("Please, enter phone number first"); + } + + HbMessageBox::information(msg); +} + +void DialpadTestView::setTapOutsideDismiss() +{ + mTapOutsideDismiss = !mTapOutsideDismiss; + mDialpad->setTapOutsideDismiss(mTapOutsideDismiss); +}