homescreenapp/hsdomainmodel/src/hspage.cpp
changeset 95 32e56106abf2
parent 90 3ac3aaebaee5
child 101 ba1b7e218624
equal deleted inserted replaced
90:3ac3aaebaee5 95:32e56106abf2
   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 {