camerauis/cameraxui/cxui/src/cxuistillprecaptureview.cpp
changeset 42 feebad15db8c
parent 41 67457b2ffb33
child 46 c826656d6714
equal deleted inserted replaced
41:67457b2ffb33 42:feebad15db8c
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:
    14 * Description:
    15 *
    15 *
    16 */
    16 */
       
    17 #include <QVariant>
       
    18 #include <QMetaType>
       
    19 #include <QGraphicsLayout>
       
    20 
    17 #include <hbpushbutton.h>
    21 #include <hbpushbutton.h>
    18 #include <hblabel.h>
    22 #include <hblabel.h>
    19 #include <hbtoolbar.h>
    23 #include <hbtoolbar.h>
    20 #include <hbaction.h>
    24 #include <hbaction.h>
    21 #include <hbmainwindow.h>
    25 #include <hbmainwindow.h>
    22 #include <hbtransparentwindow.h>
    26 #include <hbtransparentwindow.h>
    23 #include <QVariant>
       
    24 #include <QMetaType>
       
    25 #include <hbslider.h>
    27 #include <hbslider.h>
    26 #include <hblistwidget.h>
    28 #include <hblistwidget.h>
    27 #include <hbdialog.h>
    29 #include <hbdialog.h>
    28 #include <hblistwidgetitem.h>
    30 #include <hblistwidgetitem.h>
    29 #include <hbtoolbarextension.h>
    31 #include <hbtoolbarextension.h>
   121     mSelfTimer = new CxuiSelfTimer(mEngine->settings());
   123     mSelfTimer = new CxuiSelfTimer(mEngine->settings());
   122     connect(mSelfTimer, SIGNAL(timerFinished()), this, SLOT(focusAndCapture()));
   124     connect(mSelfTimer, SIGNAL(timerFinished()), this, SLOT(focusAndCapture()));
   123 
   125 
   124     int value = Cxe::GeoTaggingDisclaimerDisabled;
   126     int value = Cxe::GeoTaggingDisclaimerDisabled;
   125     mEngine->settings().get(CxeSettingIds::GEOTAGGING_DISCLAIMER, value);
   127     mEngine->settings().get(CxeSettingIds::GEOTAGGING_DISCLAIMER, value);
   126     if(value == Cxe::GeoTaggingDisclaimerEnabled) {
   128     if (value == Cxe::GeoTaggingDisclaimerEnabled) {
   127         launchGeoTaggingDisclaimerDialog();
   129         launchGeoTaggingDisclaimerDialog();
   128     }
   130     }
   129 
   131 
   130     OstTrace0( camerax_performance, DUP1_CXUISTILLPRECAPTUREVIEW_CONSTRUCT, "msg: e_CX_STILLPRECAPVIEW_CONSTRUCT 0" );
   132     OstTrace0( camerax_performance, DUP1_CXUISTILLPRECAPTUREVIEW_CONSTRUCT, "msg: e_CX_STILLPRECAPVIEW_CONSTRUCT 0" );
   131     CX_DEBUG_EXIT_FUNCTION();
   133     CX_DEBUG_EXIT_FUNCTION();
   135  * Loads default widgets in layouts xml.
   137  * Loads default widgets in layouts xml.
   136  */
   138  */
   137 void CxuiStillPrecaptureView::loadDefaultWidgets()
   139 void CxuiStillPrecaptureView::loadDefaultWidgets()
   138 {
   140 {
   139     CX_DEBUG_ENTER_FUNCTION();
   141     CX_DEBUG_ENTER_FUNCTION();
   140     CX_DEBUG_ASSERT(mDocumentLoader);
   142     CX_ASSERT_ALWAYS(mDocumentLoader);
   141 
   143 
   142     // get pointer to the viewfinder
   144     // get pointer to the viewfinder
   143     QGraphicsWidget *widget = NULL;
   145     QGraphicsWidget *widget = NULL;
   144     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_VIEWFINDER);
   146     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_VIEWFINDER);
   145     mViewfinder = qobject_cast<HbTransparentWindow *>(widget);
   147     mViewfinder = qobject_cast<HbTransparentWindow *>(widget);
   146     CX_DEBUG_ASSERT(mViewfinder);
   148     CX_ASSERT_ALWAYS(mViewfinder);
   147 
   149 
       
   150     reloadIndicatorWidgets();
       
   151     CX_DEBUG_EXIT_FUNCTION();
       
   152 }
       
   153 
       
   154 /*!
       
   155  * Loads default indicators from docml and modifies the visibility
       
   156  * according to current settings.
       
   157  */
       
   158 void CxuiStillPrecaptureView::reloadIndicatorWidgets()
       
   159 {
       
   160     CX_DEBUG_ENTER_FUNCTION();
       
   161     CX_ASSERT_ALWAYS(mDocumentLoader);
       
   162     
       
   163     bool ok = false;
       
   164     mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_INDICATORS_SECTION, &ok);
       
   165     CX_ASSERT_ALWAYS(ok);
       
   166 
       
   167     QGraphicsWidget *widget = NULL;
   148     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_QUALITY_ICON);
   168     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_QUALITY_ICON);
   149     mQualityIcon = qobject_cast<HbLabel *>(widget);
   169     mQualityIcon = qobject_cast<HbLabel *>(widget);
   150     CX_DEBUG_ASSERT(mQualityIcon);
   170     CX_ASSERT_ALWAYS(mQualityIcon);
       
   171     
       
   172     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_FLASHBLINK_INDICATOR_ICON);
       
   173     HbLabel *flashBlinkingIcon = qobject_cast<HbLabel *>(widget);
       
   174     CX_ASSERT_ALWAYS(flashBlinkingIcon);
   151 
   175 
   152     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_GEOTAGGING_INDICATOR_ICON);
   176     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_GEOTAGGING_INDICATOR_ICON);
   153     mGeoTaggingIndicatorIcon = qobject_cast<HbLabel *>(widget);
   177     mGeoTaggingIndicatorIcon = qobject_cast<HbLabel *>(widget);
   154     CX_DEBUG_ASSERT(mGeoTaggingIndicatorIcon);
   178     CX_ASSERT_ALWAYS(mGeoTaggingIndicatorIcon);
   155 
   179 
   156     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_FACE_TRACKING_ICON);
   180     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_FACE_TRACKING_ICON);
   157     mFaceTrackingIcon = qobject_cast<HbLabel *>(widget);
   181     mFaceTrackingIcon = qobject_cast<HbLabel *>(widget);
   158     CX_DEBUG_ASSERT(mFaceTrackingIcon);
   182     CX_ASSERT_ALWAYS(mFaceTrackingIcon);
   159 
   183 
   160     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_INDICATOR_CONTAINER);
   184     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_INDICATOR_CONTAINER);
   161     mIndicators = qobject_cast<HbWidget *>(widget);
   185     mIndicators = qobject_cast<HbWidget *>(widget);
   162     CX_DEBUG_ASSERT(mIndicators);
   186     CX_ASSERT_ALWAYS(mIndicators);
       
   187     
       
   188     QGraphicsLayout *layout = mIndicators->layout();
       
   189     QGraphicsLayoutItem *graphicsLayoutItem = NULL;
       
   190     QGraphicsItem *graphicsItem = NULL;
       
   191     QString key = "";
       
   192     int currentSettingValue = -1;
       
   193     bool isSettingOff = false;
       
   194     // Go through the items in the layout to check whether they should be
       
   195     // shown or not in the indicator pane. Start from the last towards
       
   196     // the first, so that removing items from between works correctly.
       
   197     for (int i = layout->count() - 1; i >= 0; i--) {
       
   198         graphicsLayoutItem = layout->itemAt(i);
       
   199         isSettingOff = false;
       
   200         if (graphicsLayoutItem) {
       
   201             graphicsItem = graphicsLayoutItem->graphicsItem();
       
   202             currentSettingValue = -1;
       
   203             if (graphicsItem == mGeoTaggingIndicatorIcon) {
       
   204                 key = CxeSettingIds::GEOTAGGING;
       
   205                 mEngine->settings().get(key, currentSettingValue);
       
   206                 if (currentSettingValue == Cxe::GeoTaggingOff) {
       
   207                     isSettingOff = true;
       
   208                 }
       
   209             } else if (graphicsItem == mFaceTrackingIcon) {
       
   210                 key = CxeSettingIds::FACE_TRACKING;
       
   211                 mEngine->settings().get(key, currentSettingValue);
       
   212                 // facetracking implementation does not use 
       
   213                 // enum for on/off values but instead 
       
   214                 // 0 for off and 1 for on.
       
   215                 if (currentSettingValue == 0) {
       
   216                     isSettingOff = true;
       
   217                 }
       
   218             } else if (graphicsItem == flashBlinkingIcon) {
       
   219                 //remove flash indicator
       
   220                 isSettingOff = true;
       
   221             }
       
   222             if (isSettingOff) {
       
   223                 layout->removeAt(i);
       
   224             }
       
   225         }
       
   226     }
       
   227     
   163     // create background for indicator container
   228     // create background for indicator container
   164     createWidgetBackgroundGraphic(mIndicators, TRANSPARENT_BACKGROUND_GRAPHIC);
   229     createWidgetBackgroundGraphic(mIndicators, TRANSPARENT_BACKGROUND_GRAPHIC);
       
   230     
       
   231     mIndicators->setVisible(true);
   165 
   232 
   166     CX_DEBUG_EXIT_FUNCTION();
   233     CX_DEBUG_EXIT_FUNCTION();
   167 }
   234 }
   168 
   235 
   169 /*!
   236 /*!
   171  * Widgets are created at the time they are first loaded.
   238  * Widgets are created at the time they are first loaded.
   172  */
   239  */
   173 void CxuiStillPrecaptureView::loadWidgets()
   240 void CxuiStillPrecaptureView::loadWidgets()
   174 {
   241 {
   175     CX_DEBUG_ENTER_FUNCTION();
   242     CX_DEBUG_ENTER_FUNCTION();
   176     CX_DEBUG_ASSERT(mDocumentLoader);
   243     CX_ASSERT_ALWAYS(mDocumentLoader);
   177 
   244 
   178     if( mWidgetsLoaded ) {
   245     if( mWidgetsLoaded ) {
   179         CX_DEBUG(("Widgets already loaded"));
   246         CX_DEBUG(("Widgets already loaded"));
   180         CX_DEBUG_EXIT_FUNCTION();
   247         CX_DEBUG_EXIT_FUNCTION();
   181         return;
   248         return;
   185 
   252 
   186     bool ok = false;
   253     bool ok = false;
   187 
   254 
   188     OstTrace0( camerax_performance, DUP4_CXUISTILLPRECAPTUREVIEW_LOADWIDGETS, "msg: e_CX_DOCUMENTLOADER_LOAD 1" );
   255     OstTrace0( camerax_performance, DUP4_CXUISTILLPRECAPTUREVIEW_LOADWIDGETS, "msg: e_CX_DOCUMENTLOADER_LOAD 1" );
   189     mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_WIDGETS_SECTION, &ok);
   256     mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_WIDGETS_SECTION, &ok);
   190     Q_ASSERT_X(ok, "camerax ui", "error in xml file parsing");
   257     CX_ASSERT_ALWAYS(ok);
   191     if (CxuiServiceProvider::isCameraEmbedded()) {
   258     if (CxuiServiceProvider::isCameraEmbedded()) {
   192         mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_EMBEDDED_SECTION, &ok);
   259         mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_EMBEDDED_SECTION, &ok);
   193     } else {
   260     } else {
   194         mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_STANDALONE_SECTION, &ok);
   261         mDocumentLoader->load(STILL_1ST_XML, STILL_PRE_CAPTURE_STANDALONE_SECTION, &ok);
   195     }
   262     }
   196     OstTrace0( camerax_performance, DUP5_CXUISTILLPRECAPTUREVIEW_LOADWIDGETS, "msg: e_CX_DOCUMENTLOADER_LOAD 0" );
   263     OstTrace0( camerax_performance, DUP5_CXUISTILLPRECAPTUREVIEW_LOADWIDGETS, "msg: e_CX_DOCUMENTLOADER_LOAD 0" );
   197     Q_ASSERT_X(ok, "camerax ui", "error in xml file parsing");
   264     CX_ASSERT_ALWAYS(ok);
   198 
   265 
   199     // get pointers to ui components from the layout data
   266     // get pointers to ui components from the layout data
   200     QGraphicsWidget *widget = NULL;
   267     QGraphicsWidget *widget = NULL;
   201     QObject *object = NULL;
   268     QObject *object = NULL;
   202 
   269 
   203     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_ZOOM_SLIDER);
   270     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_ZOOM_SLIDER);
   204     mSlider = qobject_cast<CxuiZoomSlider *>(widget);
   271     mSlider = qobject_cast<CxuiZoomSlider *>(widget);
   205     CX_DEBUG_ASSERT(mSlider);
   272     CX_ASSERT_ALWAYS(mSlider);
   206     mSlider->addZoomButtons();
   273     mSlider->addZoomButtons();
   207     createWidgetBackgroundGraphic(mSlider, TRANSPARENT_BACKGROUND_GRAPHIC);
   274     createWidgetBackgroundGraphic(mSlider, TRANSPARENT_BACKGROUND_GRAPHIC);
   208 
   275 
   209     if (mSelfTimer) {
   276     if (mSelfTimer) {
   210         // let selftimer class get needed selftimer related widgets
   277         // let selftimer class get needed selftimer related widgets
   214 
   281 
   215     // create background for selftimer containers
   282     // create background for selftimer containers
   216     HbWidget *container = NULL;
   283     HbWidget *container = NULL;
   217     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_SELFTIMER_CONTAINER);
   284     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_SELFTIMER_CONTAINER);
   218     container = qobject_cast<HbWidget *>(widget);
   285     container = qobject_cast<HbWidget *>(widget);
   219     CX_DEBUG_ASSERT(container);
   286     CX_ASSERT_ALWAYS(container);
   220     createWidgetBackgroundGraphic(container, TRANSPARENT_BACKGROUND_GRAPHIC);
   287     createWidgetBackgroundGraphic(container, TRANSPARENT_BACKGROUND_GRAPHIC);
   221 
   288 
   222     // connect selftimer start button to hide controls
   289     // connect selftimer start button to hide controls
   223     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_SELFTIMER_START_BUTTON);
   290     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_SELFTIMER_START_BUTTON);
   224     HbPushButton *startButton = qobject_cast<HbPushButton *>(widget);
   291     HbPushButton *startButton = qobject_cast<HbPushButton *>(widget);
   225     CX_DEBUG_ASSERT(startButton);
   292     CX_ASSERT_ALWAYS(startButton);
   226     connect(startButton, SIGNAL(released()), this, SLOT(hideControls()));
   293     connect(startButton, SIGNAL(released()), this, SLOT(hideControls()));
   227 
   294 
   228     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_TOOLBAR);
   295     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_TOOLBAR);
   229     mToolbar = qobject_cast<HbToolBar *>(widget);
   296     mToolbar = qobject_cast<HbToolBar *>(widget);
   230     CX_DEBUG_ASSERT(mToolbar);
   297     CX_ASSERT_ALWAYS(mToolbar);
   231 
   298 
   232     object = mDocumentLoader->findObject(STILL_PRE_CAPTURE_FLASH_ACTION);
   299     object = mDocumentLoader->findObject(STILL_PRE_CAPTURE_FLASH_ACTION);
   233     mFlashSetting = qobject_cast<HbAction *>(object);
   300     mFlashSetting = qobject_cast<HbAction *>(object);
   234     CX_DEBUG_ASSERT(mFlashSetting);
   301     CX_ASSERT_ALWAYS(mFlashSetting);
   235 
   302 
   236     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_IMAGES_LEFT_LABEL);
   303     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_IMAGES_LEFT_LABEL);
   237     mImagesLeft = qobject_cast<HbLabel *>(widget);
   304     mImagesLeft = qobject_cast<HbLabel *>(widget);
   238     CX_DEBUG_ASSERT(mImagesLeft);
   305     CX_ASSERT_ALWAYS(mImagesLeft);
   239 
   306 
   240     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_IMAGES_LEFT_CONTAINER);
   307     widget = mDocumentLoader->findWidget(STILL_PRE_CAPTURE_IMAGES_LEFT_CONTAINER);
   241     mImagesLeftContainer = qobject_cast<HbWidget *>(widget);
   308     mImagesLeftContainer = qobject_cast<HbWidget *>(widget);
   242     CX_DEBUG_ASSERT(mImagesLeftContainer);
   309     CX_ASSERT_ALWAYS(mImagesLeftContainer);
   243     createWidgetBackgroundGraphic(mImagesLeftContainer, TRANSPARENT_BACKGROUND_GRAPHIC);
   310     createWidgetBackgroundGraphic(mImagesLeftContainer, TRANSPARENT_BACKGROUND_GRAPHIC);
   244     updateImagesLeftLabel();
   311     updateImagesLeftLabel();
   245 
   312 
   246     if (CxuiServiceProvider::isCameraEmbedded()) {
   313     if (CxuiServiceProvider::isCameraEmbedded()) {
   247         CX_DEBUG(("EMBEDDED: camera in embedded mode"));
   314         CX_DEBUG(("EMBEDDED: camera in embedded mode"));
   419 
   486 
   420             CX_DEBUG(("CxuiStillPrecaptureView - icon: %s", icon.toAscii().constData()));
   487             CX_DEBUG(("CxuiStillPrecaptureView - icon: %s", icon.toAscii().constData()));
   421 
   488 
   422             if (mDocumentLoader) {
   489             if (mDocumentLoader) {
   423                 QObject *obj = mDocumentLoader->findObject(iconObjectName);
   490                 QObject *obj = mDocumentLoader->findObject(iconObjectName);
   424                 CX_DEBUG_ASSERT(obj);
   491                 CX_ASSERT_ALWAYS(obj);
   425                 qobject_cast<HbAction *>(obj)->setIcon(HbIcon(icon));
   492                 qobject_cast<HbAction *>(obj)->setIcon(HbIcon(icon));
   426             }
   493             }
   427         } else {
   494         } else {
   428             CX_DEBUG(("CxuiStillPrecaptureView - widgets not loaded yet, ignored!"));
   495             CX_DEBUG(("CxuiStillPrecaptureView - widgets not loaded yet, ignored!"));
   429         }
   496         }
   858             // update the quality indicator on screen
   925             // update the quality indicator on screen
   859             updateQualityIcon();
   926             updateQualityIcon();
   860             // update images left when quality values are changed
   927             // update images left when quality values are changed
   861             updateImagesLeftLabel();
   928             updateImagesLeftLabel();
   862         } else if (key == CxeSettingIds::FACE_TRACKING) {
   929         } else if (key == CxeSettingIds::FACE_TRACKING) {
       
   930             reloadIndicatorWidgets();
   863             updateFaceTrackingIcon();
   931             updateFaceTrackingIcon();
       
   932         } else if (key == CxeSettingIds::GEOTAGGING) {
       
   933             reloadIndicatorWidgets();
   864         }
   934         }
   865 
   935 
   866         // update toolbar flash icon
   936         // update toolbar flash icon
   867         if (mFlashSetting && key == CxeSettingIds::FLASH_MODE) {
   937         if (mFlashSetting && key == CxeSettingIds::FLASH_MODE) {
   868             CX_DEBUG((("flash mode: %d"), newValue.toInt()));
   938             CX_DEBUG((("flash mode: %d"), newValue.toInt()));