src/hbutils/document/hbdocumentloaderactions_p.cpp
changeset 6 c3690ec91ef8
parent 2 06ff229162e9
child 7 923ff622b8b9
--- a/src/hbutils/document/hbdocumentloaderactions_p.cpp	Fri Jun 11 13:58:22 2010 +0300
+++ b/src/hbutils/document/hbdocumentloaderactions_p.cpp	Wed Jun 23 18:33:25 2010 +0300
@@ -100,7 +100,7 @@
         return false;
     }
 
-    QObject *current = lookUp(type, name).first.data();
+    QObject *current = lookUp(type, name).mObject.data();
 
     if( current == 0 ) {
         HB_DOCUMENTLOADER_PRINT( QString( "Not supported object: " ) + type );
@@ -137,7 +137,7 @@
     }
 
     ObjectMapItem item = lookUp(type, name, plugin);
-    QObject *current = item.first.data();
+    QObject *current = item.mObject.data();
 
     if( current == 0 ) {
         HB_DOCUMENTLOADER_PRINT( QString( "Not supported object: " ) + type );
@@ -149,7 +149,7 @@
         parentAsWidget = static_cast<QGraphicsWidget *>(parent);
     }
     QGraphicsWidget *asWidget(0);
-    if (item.second == HbXml::WIDGET) {
+    if (item.mType == HbXml::WIDGET) {
         asWidget = static_cast<QGraphicsWidget *>(current);
     }
 
@@ -194,8 +194,8 @@
         return false;
     } else {
         ObjectMapItem &item = mObjectMap[ widget ];
-        if (item.second == HbXml::WIDGET) {
-            parent = qobject_cast<HbWidget *>( item.first.data() );
+        if (item.mType == HbXml::WIDGET) {
+            parent = qobject_cast<HbWidget *>( item.mObject.data() );
         }
         if( !parent ) {
             HB_DOCUMENTLOADER_PRINT( QString( "SPACERITEM: CANNOT SET SPACERITEM TO NON-HBWIDGET " ) );
@@ -237,14 +237,14 @@
         return false;
     }
 
-    QObject *src = mObjectMap[ srcName ].first;
+    QObject *src = mObjectMap[ srcName ].mObject;
 
     if( !src ) {
         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, already destroyed " ) + srcName );
         return false;
     }
 
-    QObject *dst = mObjectMap[ dstName ].first;
+    QObject *dst = mObjectMap[ dstName ].mObject;
 
     if( !dst ) {
         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, already destroyed " ) + dstName );
@@ -295,7 +295,7 @@
 bool HbDocumentLoaderActions::pushRef( const QString &name, const QString &role )
 {
     QObject *current = findFromStack();
-    QObject *ref = mObjectMap[ name ].first.data();
+    QObject *ref = mObjectMap[ name ].mObject.data();
 
     if( ( current == 0 ) || ( ref == 0 ) ) {
         HB_DOCUMENTLOADER_PRINT( QString( "Wrong role name or role context" ) );
@@ -526,8 +526,8 @@
         if( isWidget ) {
             parent = static_cast<QGraphicsWidget *>( parentObj );
         }
-    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
-        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
+    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
+        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
     }
     if ( !parent ) {
         HB_DOCUMENTLOADER_PRINT( QString( "ANCHORLAYOUT: PARENT NOT FOUND" ) );
@@ -594,8 +594,8 @@
     } else if ( !( mObjectMap.contains( src ) ) ) {
         item1 = findLayoutItem( *layout, src );
     } else {
-        if (mObjectMap[ src ].second == HbXml::WIDGET) {
-            item1 = static_cast<QGraphicsWidget *>( mObjectMap[ src ].first.data() );
+        if (mObjectMap[ src ].mType == HbXml::WIDGET) {
+            item1 = static_cast<QGraphicsWidget *>( mObjectMap[ src ].mObject.data() );
         }
     }
     if ( !item1 ) {
@@ -608,8 +608,8 @@
     } else if( !( mObjectMap.contains( dst ) ) ) {
         item2 = findLayoutItem( *layout, dst );
     } else {
-        if (mObjectMap[ dst ].second == HbXml::WIDGET) {
-            item2 = static_cast<QGraphicsWidget *>( mObjectMap[ dst ].first.data() );
+        if (mObjectMap[ dst ].mType == HbXml::WIDGET) {
+            item2 = static_cast<QGraphicsWidget *>( mObjectMap[ dst ].mObject.data() );
         }
     }
     if ( !item2 ) {
@@ -636,8 +636,8 @@
         if( isWidget ) {
             parent = static_cast<QGraphicsWidget *>( parentObj );
         }
-    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
-        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
+    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
+        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
     }
     if ( !parent ) {
         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: PARENT NOT FOUND" ) );
@@ -681,8 +681,8 @@
     if( src.isEmpty() ) {
         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: TRY TO ADD EMPTY ITEM " ) + src );
         return false;
-    } else if ( mObjectMap.contains( src ) && mObjectMap[ src ].second == HbXml::WIDGET ) {
-        item = static_cast<QGraphicsWidget *>( mObjectMap[ src ].first.data() );
+    } else if ( mObjectMap.contains( src ) && mObjectMap[ src ].mType == HbXml::WIDGET ) {
+        item = static_cast<QGraphicsWidget *>( mObjectMap[ src ].mObject.data() );
     } else {
         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: NO SUCH ITEM " ) + src );
         return false;
@@ -872,8 +872,8 @@
         if ( isWidget ) {
             parent = static_cast<QGraphicsWidget *>( parentObj );
         }
-    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
-        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
+    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
+        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
     }
     if ( !parent ) {
         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: PARENT NOT FOUND" ) );
@@ -919,8 +919,8 @@
     if ( itemname.isEmpty() ) {
         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: TRY TO ADD EMPTY ITEM " ) + itemname );
         return false;
-    } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].second == HbXml::WIDGET ) {
-        item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].first.data() );
+    } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].mType == HbXml::WIDGET ) {
+        item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].mObject.data() );
     } else {
         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: NO SUCH ITEM " ) + itemname );
         return false;
@@ -1015,8 +1015,8 @@
         if( isWidget ) {
             parent = static_cast<QGraphicsWidget *>( parentObj );
         }
-    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
-        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
+    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
+        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
     }
     if ( !parent ) {
         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: PARENT NOT FOUND" ) );
@@ -1044,8 +1044,8 @@
     if( itemname.isEmpty() ) {
         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: TRY TO ADD EMPTY ITEM " ) + itemname );
         return false;
-    } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].second == HbXml::WIDGET ) {
-        item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].first.data() );
+    } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].mType == HbXml::WIDGET ) {
+        item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].mObject.data() );
     } else {
         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: NO SUCH ITEM " ) + itemname );
         return false;
@@ -1068,8 +1068,8 @@
         if( isWidget ) {
             parent = static_cast<QGraphicsWidget *>( parentObj );
         }
-    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
-        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
+    } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
+        parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
     }
     if ( !parent ) {
         HB_DOCUMENTLOADER_PRINT( QString( "NULL LAYOUT: PARENT NOT FOUND" ) );
@@ -1087,7 +1087,18 @@
 bool HbDocumentLoaderActions::setWidgetRole(
     QGraphicsWidget *parent, QGraphicsWidget *child, const QString &role)
 {
-    return mFactory.setWidgetRole(parent, child, role);
+    bool roleTransfersOwnership = false; 
+
+    // updates roleTransfersOwnership only on succesfull execution
+    const bool result = mFactory.setWidgetRole(parent, child, role, roleTransfersOwnership);
+
+    if ( roleTransfersOwnership ) {
+        // remove ownership from own data structure    
+        ObjectMapItem &item = mObjectMap[child->objectName()];
+        item.mOwned = false;
+    }
+
+    return result;
 }
 
 bool HbDocumentLoaderActions::setObjectRole(