diff -r 11d3954df52a -r 627c4a0fd0e7 src/hbinput/inputwidgets/hbinputbuttongroup.cpp --- a/src/hbinput/inputwidgets/hbinputbuttongroup.cpp Thu May 27 13:10:59 2010 +0300 +++ b/src/hbinput/inputwidgets/hbinputbuttongroup.cpp Fri Jun 11 13:58:22 2010 +0300 @@ -23,12 +23,13 @@ ** ****************************************************************************/ -#include #include #include #include #include #include +#include +#include #include #include @@ -38,6 +39,7 @@ #include #include #include +#include #include "hbframedrawerpool_p.h" #include "hbinputbuttongroup.h" @@ -314,13 +316,23 @@ int index = mButtonData.indexOf(item); if (mButtonPreviewEnabled && item->type() != HbInputButton::ButtonTypeFunction && !mButtonPreview.contains(index)) { - HbInputButtonGroup *group = new HbInputButtonGroup(QSize(1, 1), q); + HbInputButtonGroup *group = new HbInputButtonGroup(QSize(1, 1)); mButtonPreview.insert(index, group); QList buttons; - HbInputButton *previewItem = new HbInputButton(item->text(HbInputButton::ButtonTextIndexPrimary).at(0).unicode(), QPoint(0, 0)); + HbInputButton *previewItem = 0; + if (!item->icon(HbInputButton::ButtonIconIndexPrimary).isNull()) { + int keyCode = -1; + if (!item->text(HbInputButton::ButtonTextIndexPrimary).isEmpty()) { + keyCode = item->text(HbInputButton::ButtonTextIndexPrimary).at(0).unicode(); + } + previewItem = new HbInputButton(keyCode, QPoint(0, 0)); + previewItem->setIcon(item->icon(HbInputButton::ButtonIconIndexPrimary), HbInputButton::ButtonIconIndexPrimary); + } else if (!item->text(HbInputButton::ButtonTextIndexPrimary).isEmpty()) { + previewItem = new HbInputButton(item->text(HbInputButton::ButtonTextIndexPrimary).at(0).unicode(), QPoint(0, 0)); + previewItem->setText(item->text(HbInputButton::ButtonTextIndexPrimary), HbInputButton::ButtonTextIndexPrimary); + } previewItem->setType(HbInputButton::ButtonTypeLabel); - previewItem->setText(item->text(HbInputButton::ButtonTextIndexPrimary), HbInputButton::ButtonTextIndexPrimary); buttons.append(previewItem); group->setButtons(buttons); @@ -328,22 +340,24 @@ qreal cellHeight = q->boundingRect().height() / mGridSize.height(); QFont font = HbFontSpec(HbFontSpec::Primary).font(); - font.setPixelSize(int(fontSize(ButtonTextTypeLabel))); + font.setPixelSize(int(fontSize(ButtonTextTypeLabel))); QFontMetricsF fontMetrics(font); qreal textWidth = fontMetrics.width(item->text(HbInputButton::ButtonTextIndexPrimary)); qreal width = textWidth + HbPreviewMarginInUnits * mUnitValue; - if (width < HbPreviewWidthInUnits * mUnitValue) { + if (!item->icon(HbInputButton::ButtonIconIndexPrimary).isNull()) { + width = item->boundingRect().width(); + } else if (width < HbPreviewWidthInUnits * mUnitValue) { width = HbPreviewWidthInUnits * mUnitValue; } qreal height = HbPreviewHeightInUnits * mUnitValue; - qreal x = (item->position().x() + 0.5 * item->size().width()) * cellWidth - 0.5 * width; + qreal x = q->scenePos().x() + (item->position().x() + 0.5 * item->size().width()) * cellWidth - 0.5 * width; if (x < 0) { x = 0; } else if (x + width > q->boundingRect().width()) { x = q->boundingRect().width() - width; } - qreal y = item->position().y() * cellHeight - height; + qreal y = q->scenePos().y() + item->position().y() * cellHeight - height; group->setGeometry(QRectF(x, y, width, height)); if (q->parentItem()) { group->setZValue(q->parentItem()->zValue() + 1); @@ -371,12 +385,15 @@ if (mCharacterSelectionPreviewEnabled && item->type() != HbInputButton::ButtonTypeFunction && item->mappedCharacters().count() > 1) { + + HbWidgetFeedback::triggered(q, Hb::InstantLongPressed); mProbabilities.clear(); q->cancelButtonPress(); if (!mCharacterSelectionPreview) { mCharacterSelectionPreview = new HbDialog(); + HbInputRegionCollector::instance()->attach(mCharacterSelectionPreview); mCharacterSelectionPreview->setModal(true); mCharacterSelectionPreview->setBackgroundFaded(false); mCharacterSelectionPreview->setTimeout(HbPopup::NoTimeout); @@ -398,7 +415,7 @@ qreal cellHeight = q->boundingRect().height() / mGridSize.height(); QFont font = HbFontSpec(HbFontSpec::Primary).font(); - font.setPixelSize(int(fontSize(ButtonTextTypeLabel))); + font.setPixelSize(int(fontSize(ButtonTextTypeLabel))); QFontMetricsF fontMetrics(font); qreal textWidth = fontMetrics.width(item->mappedCharacters()); @@ -441,7 +458,7 @@ int column = static_cast(position.x() / (q->boundingRect().width() / mGridSize.width())); int row = static_cast(position.y() / (q->boundingRect().height() / mGridSize.height())); - int index = mButtonGridPositions.value(QPair(column, row)); + int index = mButtonGridPositions.value(QPair(column, row), -1); if (index >= 0 && index < mButtonData.count()) { HbInputButton *item = mButtonData.at(index); @@ -491,7 +508,7 @@ int column = static_cast(position.x() / (q->boundingRect().width() / mGridSize.width())); int row = static_cast(position.y() / (q->boundingRect().height() / mGridSize.height())); - int index = mButtonGridPositions.value(QPair(column, row)); + int index = mButtonGridPositions.value(QPair(column, row), -1); if (index >= 0 && index < mButtonData.count()) { HbInputButton *item = mButtonData.at(index); @@ -538,8 +555,8 @@ int newColumn = static_cast(newPosition.x() / (q->boundingRect().width() / mGridSize.width())); int newRow = static_cast(newPosition.y() / (q->boundingRect().height() / mGridSize.height())); - int oldIndex = mButtonGridPositions.value(QPair(oldColumn, oldRow)); - int newIndex = mButtonGridPositions.value(QPair(newColumn, newRow)); + int oldIndex = mButtonGridPositions.value(QPair(oldColumn, oldRow), -1); + int newIndex = mButtonGridPositions.value(QPair(newColumn, newRow), -1); if (newPosition.x() >= 0 && newPosition.x() < q->boundingRect().width() && newPosition.y() >= 0 && newPosition.y() < q->boundingRect().height() && @@ -583,7 +600,7 @@ int column = static_cast(position.x() / (q->boundingRect().width() / mGridSize.width())); int row = static_cast(position.y() / (q->boundingRect().height() / mGridSize.height())); - int index = mButtonGridPositions.value(QPair(column, row)); + int index = mButtonGridPositions.value(QPair(column, row), -1); if (index >= 0 && index < mButtonData.count()) { HbInputButton *item = mButtonData.at(index); @@ -611,6 +628,7 @@ HbWidgetFeedback::triggered(q, Hb::InstantClicked); int actionIndex = item->keyCode() - HbInputButton::ButtonKeyCodeCustom; if (actionIndex >= 0 && actionIndex < mCustomActions.count()) { + emit q->aboutToActivateCustomAction(mCustomActions.at(actionIndex)); mCustomActions.at(actionIndex)->activate(QAction::Trigger); } else { calculateButtonProbabilities(position); @@ -656,20 +674,20 @@ QKeyEvent pressEvent(QEvent::KeyPress, item->keyCode(), Qt::NoModifier, text, true); q->emitButtonPressed(pressEvent); } else { - if (mCharacterSelectionPreviewEnabled) { + if (mCharacterSelectionPreviewEnabled && item->type() != HbInputButton::ButtonTypeFunction && item->mappedCharacters().count() > 1) { showCharacterSelectionPreview(item); - } + } else { + HbWidgetFeedback::triggered(q, Hb::InstantLongPressed); - HbWidgetFeedback::triggered(q, Hb::InstantLongPressed); + delete timer; - delete timer; - - QString text; - if (item->type() == HbInputButton::ButtonTypeLabel) { - text = item->text(HbInputButton::ButtonTextIndexPrimary); + QString text; + if (item->type() == HbInputButton::ButtonTypeLabel) { + text = item->text(HbInputButton::ButtonTextIndexPrimary); + } + QKeyEvent event(QEvent::KeyPress, item->keyCode(), Qt::NoModifier, text, true); + q->emitButtonLongPressed(event); } - QKeyEvent event(QEvent::KeyPress, item->keyCode(), Qt::NoModifier, text, true); - q->emitButtonLongPressed(event); } } } @@ -742,7 +760,7 @@ qreal textHeight = fontMetrics.height(); QTextLine line = mTextLayouts.at(index)->createLine(); - line.setNumColumns(1); + line.setNumColumns(item->text(HbInputButton::ButtonTextIndexPrimary).length()); if (typeIndex == HbInputButton::ButtonTypeLabel) { layoutTextLine(ButtonTextTypeLabel, item, QSizeF(cellWidth, cellHeight), line, QSizeF(textWidth, textHeight)); @@ -784,7 +802,7 @@ qreal textHeight = fontMetrics.height(); QTextLine line = mTextLayouts.at(index)->createLine(); - line.setNumColumns(1); + line.setNumColumns(item->text(HbInputButton::ButtonTextIndexPrimary).length()); layoutTextLine(ButtonTextTypePrimary, item, QSizeF(cellWidth, cellHeight), line, QSizeF(textWidth, textHeight)); } @@ -819,7 +837,7 @@ qreal textHeight = fontMetrics.height(); QTextLine line = mTextLayouts.at(index)->createLine(); - line.setNumColumns(1); + line.setNumColumns(item->text(HbInputButton::ButtonTextIndexSecondaryFirstRow).length()); layoutTextLine(ButtonTextTypeSecondaryFirstRow, item, QSizeF(cellWidth, cellHeight), line, QSizeF(textWidth, textHeight)); } @@ -830,7 +848,7 @@ qreal textHeight = fontMetrics.height(); QTextLine line = mTextLayouts.at(index)->createLine(); - line.setNumColumns(1); + line.setNumColumns(item->text(HbInputButton::ButtonTextIndexSecondarySecondRow).length()); layoutTextLine(ButtonTextTypeSecondarySecondRow, item, QSizeF(cellWidth, cellHeight), line, QSizeF(textWidth, textHeight)); } @@ -960,6 +978,15 @@ } } +void HbInputButtonGroupPrivate::_q_customActionDestroyed(QObject *object) +{ + Q_Q(HbInputButtonGroup); + + HbAction *action = static_cast(object); + mCustomActions.removeAll(action); + q->updateCustomButtons(); +} + /// @endcond /*! @@ -1133,7 +1160,7 @@ int index = -1; if (d->mButtonGridPositions.contains(QPair(column, row))) { - index = d->mButtonGridPositions.value(QPair(column, row)); + index = d->mButtonGridPositions.value(QPair(column, row), -1); } setButton(data, index); } @@ -1207,7 +1234,7 @@ int index = -1; if (d->mButtonGridPositions.contains(QPair(column, row))) { - index = d->mButtonGridPositions.value(QPair(column, row)); + index = d->mButtonGridPositions.value(QPair(column, row), -1); } return button(index); } @@ -1243,11 +1270,13 @@ Q_D(HbInputButtonGroup); disconnect(this, SLOT(updateCustomButtons())); + disconnect(this, SLOT(_q_customActionDestroyed(QObject *))); d->mCustomActions = actions; foreach (HbAction *action, d->mCustomActions) { connect(action, SIGNAL(changed()), this, SLOT(updateCustomButtons())); + connect(action, SIGNAL(destroyed(QObject *)), this, SLOT(_q_customActionDestroyed(QObject *))); } d->updateCustomActions(); @@ -1571,6 +1600,7 @@ } else if (event->type() == QEvent::GraphicsSceneMouseRelease) { QGraphicsSceneMouseEvent *mouseEvent = static_cast(event); d->releaseEvent(mouseEvent->pos()); + cancelButtonPress(); } else { return HbWidget::event(event); } @@ -1762,4 +1792,6 @@ update(); } +#include "moc_hbinputbuttongroup.cpp" + // End of file