654 Run positioning algorithm for widgets which don't have position on |
654 Run positioning algorithm for widgets which don't have position on |
655 target orientation. Otherwise set orientation positions for widgets. |
655 target orientation. Otherwise set orientation positions for widgets. |
656 */ |
656 */ |
657 void HsPage::onOrientationChanged(Qt::Orientation orientation) |
657 void HsPage::onOrientationChanged(Qt::Orientation orientation) |
658 { |
658 { |
659 HsWidgetPositioningOnOrientationChange *converter = |
|
660 HsWidgetPositioningOnOrientationChange::instance(); |
|
661 |
|
662 Qt::Orientation orientationFrom = orientation == Qt::Vertical ? Qt::Horizontal : Qt::Vertical; |
659 Qt::Orientation orientationFrom = orientation == Qt::Vertical ? Qt::Horizontal : Qt::Vertical; |
663 QRectF from = contentGeometry(orientationFrom); |
660 QRectF from = contentGeometry(orientationFrom); |
664 QRectF to = contentGeometry(orientation); |
661 QRectF to = contentGeometry(orientation); |
665 |
662 |
666 HsWidgetPresentationData presentation; |
663 HsWidgetPresentationData presentation; |
678 QRectF adjustWidgetPosition; |
675 QRectF adjustWidgetPosition; |
679 adjustWidgetPosition = visual->geometry(); |
676 adjustWidgetPosition = visual->geometry(); |
680 adjustWidgetPosition.moveTopLeft(presentation.pos()); |
677 adjustWidgetPosition.moveTopLeft(presentation.pos()); |
681 visual->setPos(adjustedWidgetPosition(adjustWidgetPosition)); |
678 visual->setPos(adjustedWidgetPosition(adjustWidgetPosition)); |
682 visual->setZValue(presentation.zValue); |
679 visual->setZValue(presentation.zValue); |
683 widget->savePresentation(); //Needed to follow pageMargin dynamic change |
|
684 } |
680 } |
685 } |
681 } |
686 } |
682 } |
687 if (newWidgets.count()) { |
683 if (newWidgets.count()) { |
688 // get rects for new widgets |
684 // get rects for new widgets |
703 } |
699 } |
704 |
700 |
705 // calculate new widget positions with "stuck 'em all"-algorithm |
701 // calculate new widget positions with "stuck 'em all"-algorithm |
706 HsWidgetPositioningOnWidgetAdd *algorithm = |
702 HsWidgetPositioningOnWidgetAdd *algorithm = |
707 HsWidgetPositioningOnWidgetAdd::instance(); |
703 HsWidgetPositioningOnWidgetAdd::instance(); |
708 QList<QRectF> calculatedRects = |
704 |
709 algorithm->convert(pageRect, existingRects, newRects, QPointF()); |
705 HsWidgetPositioningOnWidgetAdd::Result result; |
710 |
706 result = algorithm->convert(pageRect, existingRects, newRects, QPointF()); |
711 for (int i=0; i<newWidgets.count(); i++) { |
707 |
712 int j = mWidgets.indexOf(newWidgets.at(i)); |
708 QList<HsWidgetPresentationData> widgetPresentationList; |
713 mWidgets.at(j)->visual()->setGeometry(calculatedRects.at(i)); |
709 |
714 mWidgets.at(j)->savePresentation(); |
710 if (result.rectOrder != QList<int>()) { |
715 } |
711 for (int i=0; i<newWidgets.count(); i++) { |
|
712 int rectId = result.rectOrder.at(i); |
|
713 int widgetId = mWidgets.indexOf(newWidgets.at(rectId)); |
|
714 mWidgets.at(widgetId)->visual()->setGeometry(result.calculatedRects.at(rectId)); |
|
715 // update z value |
|
716 int zValue = mWidgets.at(widgetId)->visual()->zValue(); |
|
717 mWidgets.at(widgetId)->visual()->setZValue(zValue - rectId + i); |
|
718 HsWidgetPresentationData data; |
|
719 data.zValue = zValue - rectId + i; |
|
720 data.widgetId = mWidgets.at(widgetId)->databaseId(); |
|
721 data.setPos(mWidgets.at(widgetId)->visual()->pos()); |
|
722 widgetPresentationList.append(data); |
|
723 } |
|
724 } |
|
725 if (!widgetPresentationList.isEmpty()) { |
|
726 HsDatabase::instance()->updateWidgetPresentations( |
|
727 widgetPresentationList, HsGui::instance()->orientation()); |
|
728 } |
|
729 |
716 } |
730 } |
717 } |
731 } |
718 |
732 |
719 void HsPage::onPageMarginChanged(const QString &value) |
733 void HsPage::onPageMarginChanged(const QString &value) |
720 { |
734 { |