src/hbutils/document/hbdocumentloaderactions_p.cpp
changeset 6 c3690ec91ef8
parent 2 06ff229162e9
child 7 923ff622b8b9
equal deleted inserted replaced
5:627c4a0fd0e7 6:c3690ec91ef8
    98     if ( !parent && name.isEmpty() ) {
    98     if ( !parent && name.isEmpty() ) {
    99         HB_DOCUMENTLOADER_PRINT( QString( "Top level object must have name" ) );
    99         HB_DOCUMENTLOADER_PRINT( QString( "Top level object must have name" ) );
   100         return false;
   100         return false;
   101     }
   101     }
   102 
   102 
   103     QObject *current = lookUp(type, name).first.data();
   103     QObject *current = lookUp(type, name).mObject.data();
   104 
   104 
   105     if( current == 0 ) {
   105     if( current == 0 ) {
   106         HB_DOCUMENTLOADER_PRINT( QString( "Not supported object: " ) + type );
   106         HB_DOCUMENTLOADER_PRINT( QString( "Not supported object: " ) + type );
   107         return false;
   107         return false;
   108     }
   108     }
   135         HB_DOCUMENTLOADER_PRINT( QString( "Object element cannot be parent of widget" ) );
   135         HB_DOCUMENTLOADER_PRINT( QString( "Object element cannot be parent of widget" ) );
   136         return false;
   136         return false;
   137     }
   137     }
   138 
   138 
   139     ObjectMapItem item = lookUp(type, name, plugin);
   139     ObjectMapItem item = lookUp(type, name, plugin);
   140     QObject *current = item.first.data();
   140     QObject *current = item.mObject.data();
   141 
   141 
   142     if( current == 0 ) {
   142     if( current == 0 ) {
   143         HB_DOCUMENTLOADER_PRINT( QString( "Not supported object: " ) + type );
   143         HB_DOCUMENTLOADER_PRINT( QString( "Not supported object: " ) + type );
   144         return false;
   144         return false;
   145     }
   145     }
   147     QGraphicsWidget *parentAsWidget(0);
   147     QGraphicsWidget *parentAsWidget(0);
   148     if (parentIsWidget) {
   148     if (parentIsWidget) {
   149         parentAsWidget = static_cast<QGraphicsWidget *>(parent);
   149         parentAsWidget = static_cast<QGraphicsWidget *>(parent);
   150     }
   150     }
   151     QGraphicsWidget *asWidget(0);
   151     QGraphicsWidget *asWidget(0);
   152     if (item.second == HbXml::WIDGET) {
   152     if (item.mType == HbXml::WIDGET) {
   153         asWidget = static_cast<QGraphicsWidget *>(current);
   153         asWidget = static_cast<QGraphicsWidget *>(current);
   154     }
   154     }
   155 
   155 
   156     if (!asWidget || (parent && !parentAsWidget)) {
   156     if (!asWidget || (parent && !parentAsWidget)) {
   157         HB_DOCUMENTLOADER_PRINT( QString( "Not a widget" ) );
   157         HB_DOCUMENTLOADER_PRINT( QString( "Not a widget" ) );
   192     } else if( !( mObjectMap.contains( widget ) ) ) {
   192     } else if( !( mObjectMap.contains( widget ) ) ) {
   193         HB_DOCUMENTLOADER_PRINT( QString( "SPACERITEM: NO SUCH ITEM " ) + widget );
   193         HB_DOCUMENTLOADER_PRINT( QString( "SPACERITEM: NO SUCH ITEM " ) + widget );
   194         return false;
   194         return false;
   195     } else {
   195     } else {
   196         ObjectMapItem &item = mObjectMap[ widget ];
   196         ObjectMapItem &item = mObjectMap[ widget ];
   197         if (item.second == HbXml::WIDGET) {
   197         if (item.mType == HbXml::WIDGET) {
   198             parent = qobject_cast<HbWidget *>( item.first.data() );
   198             parent = qobject_cast<HbWidget *>( item.mObject.data() );
   199         }
   199         }
   200         if( !parent ) {
   200         if( !parent ) {
   201             HB_DOCUMENTLOADER_PRINT( QString( "SPACERITEM: CANNOT SET SPACERITEM TO NON-HBWIDGET " ) );
   201             HB_DOCUMENTLOADER_PRINT( QString( "SPACERITEM: CANNOT SET SPACERITEM TO NON-HBWIDGET " ) );
   202             return false;
   202             return false;
   203         }
   203         }
   235     if( ! mObjectMap.contains( dstName ) ) {
   235     if( ! mObjectMap.contains( dstName ) ) {
   236         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, no instance with name " ) + dstName );
   236         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, no instance with name " ) + dstName );
   237         return false;
   237         return false;
   238     }
   238     }
   239 
   239 
   240     QObject *src = mObjectMap[ srcName ].first;
   240     QObject *src = mObjectMap[ srcName ].mObject;
   241 
   241 
   242     if( !src ) {
   242     if( !src ) {
   243         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, already destroyed " ) + srcName );
   243         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, already destroyed " ) + srcName );
   244         return false;
   244         return false;
   245     }
   245     }
   246 
   246 
   247     QObject *dst = mObjectMap[ dstName ].first;
   247     QObject *dst = mObjectMap[ dstName ].mObject;
   248 
   248 
   249     if( !dst ) {
   249     if( !dst ) {
   250         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, already destroyed " ) + dstName );
   250         HB_DOCUMENTLOADER_PRINT( QString( "Unable to establish signal/slot connection, already destroyed " ) + dstName );
   251         return false;
   251         return false;
   252     }
   252     }
   293 }
   293 }
   294 
   294 
   295 bool HbDocumentLoaderActions::pushRef( const QString &name, const QString &role )
   295 bool HbDocumentLoaderActions::pushRef( const QString &name, const QString &role )
   296 {
   296 {
   297     QObject *current = findFromStack();
   297     QObject *current = findFromStack();
   298     QObject *ref = mObjectMap[ name ].first.data();
   298     QObject *ref = mObjectMap[ name ].mObject.data();
   299 
   299 
   300     if( ( current == 0 ) || ( ref == 0 ) ) {
   300     if( ( current == 0 ) || ( ref == 0 ) ) {
   301         HB_DOCUMENTLOADER_PRINT( QString( "Wrong role name or role context" ) );
   301         HB_DOCUMENTLOADER_PRINT( QString( "Wrong role name or role context" ) );
   302         return false;
   302         return false;
   303     }
   303     }
   524         bool isWidget = false;
   524         bool isWidget = false;
   525         QObject *parentObj = findFromStack( &isWidget );
   525         QObject *parentObj = findFromStack( &isWidget );
   526         if( isWidget ) {
   526         if( isWidget ) {
   527             parent = static_cast<QGraphicsWidget *>( parentObj );
   527             parent = static_cast<QGraphicsWidget *>( parentObj );
   528         }
   528         }
   529     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
   529     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
   530         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
   530         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
   531     }
   531     }
   532     if ( !parent ) {
   532     if ( !parent ) {
   533         HB_DOCUMENTLOADER_PRINT( QString( "ANCHORLAYOUT: PARENT NOT FOUND" ) );
   533         HB_DOCUMENTLOADER_PRINT( QString( "ANCHORLAYOUT: PARENT NOT FOUND" ) );
   534         return false;
   534         return false;
   535     }
   535     }
   592     if ( src.isEmpty() ) {
   592     if ( src.isEmpty() ) {
   593         item1 = layout;
   593         item1 = layout;
   594     } else if ( !( mObjectMap.contains( src ) ) ) {
   594     } else if ( !( mObjectMap.contains( src ) ) ) {
   595         item1 = findLayoutItem( *layout, src );
   595         item1 = findLayoutItem( *layout, src );
   596     } else {
   596     } else {
   597         if (mObjectMap[ src ].second == HbXml::WIDGET) {
   597         if (mObjectMap[ src ].mType == HbXml::WIDGET) {
   598             item1 = static_cast<QGraphicsWidget *>( mObjectMap[ src ].first.data() );
   598             item1 = static_cast<QGraphicsWidget *>( mObjectMap[ src ].mObject.data() );
   599         }
   599         }
   600     }
   600     }
   601     if ( !item1 ) {
   601     if ( !item1 ) {
   602         HB_DOCUMENTLOADER_PRINT( QString( "ANCHORLAYOUT: NO SUCH ITEM " ) + src );
   602         HB_DOCUMENTLOADER_PRINT( QString( "ANCHORLAYOUT: NO SUCH ITEM " ) + src );
   603         return false;
   603         return false;
   606     if ( dst.isEmpty() ) {
   606     if ( dst.isEmpty() ) {
   607         item2 = layout;
   607         item2 = layout;
   608     } else if( !( mObjectMap.contains( dst ) ) ) {
   608     } else if( !( mObjectMap.contains( dst ) ) ) {
   609         item2 = findLayoutItem( *layout, dst );
   609         item2 = findLayoutItem( *layout, dst );
   610     } else {
   610     } else {
   611         if (mObjectMap[ dst ].second == HbXml::WIDGET) {
   611         if (mObjectMap[ dst ].mType == HbXml::WIDGET) {
   612             item2 = static_cast<QGraphicsWidget *>( mObjectMap[ dst ].first.data() );
   612             item2 = static_cast<QGraphicsWidget *>( mObjectMap[ dst ].mObject.data() );
   613         }
   613         }
   614     }
   614     }
   615     if ( !item2 ) {
   615     if ( !item2 ) {
   616         HB_DOCUMENTLOADER_PRINT( QString( "ANCHORLAYOUT: NO SUCH ITEM " ) + dst );
   616         HB_DOCUMENTLOADER_PRINT( QString( "ANCHORLAYOUT: NO SUCH ITEM " ) + dst );
   617         return false;
   617         return false;
   634         bool isWidget = false;
   634         bool isWidget = false;
   635         QObject *parentObj = findFromStack( &isWidget );
   635         QObject *parentObj = findFromStack( &isWidget );
   636         if( isWidget ) {
   636         if( isWidget ) {
   637             parent = static_cast<QGraphicsWidget *>( parentObj );
   637             parent = static_cast<QGraphicsWidget *>( parentObj );
   638         }
   638         }
   639     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
   639     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
   640         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
   640         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
   641     }
   641     }
   642     if ( !parent ) {
   642     if ( !parent ) {
   643         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: PARENT NOT FOUND" ) );
   643         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: PARENT NOT FOUND" ) );
   644         return false;
   644         return false;
   645     }
   645     }
   679     }
   679     }
   680 
   680 
   681     if( src.isEmpty() ) {
   681     if( src.isEmpty() ) {
   682         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: TRY TO ADD EMPTY ITEM " ) + src );
   682         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: TRY TO ADD EMPTY ITEM " ) + src );
   683         return false;
   683         return false;
   684     } else if ( mObjectMap.contains( src ) && mObjectMap[ src ].second == HbXml::WIDGET ) {
   684     } else if ( mObjectMap.contains( src ) && mObjectMap[ src ].mType == HbXml::WIDGET ) {
   685         item = static_cast<QGraphicsWidget *>( mObjectMap[ src ].first.data() );
   685         item = static_cast<QGraphicsWidget *>( mObjectMap[ src ].mObject.data() );
   686     } else {
   686     } else {
   687         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: NO SUCH ITEM " ) + src );
   687         HB_DOCUMENTLOADER_PRINT( QString( "GRIDLAYOUT: NO SUCH ITEM " ) + src );
   688         return false;
   688         return false;
   689     }
   689     }
   690 
   690 
   870         bool isWidget = false;
   870         bool isWidget = false;
   871         QObject *parentObj = findFromStack( &isWidget );
   871         QObject *parentObj = findFromStack( &isWidget );
   872         if ( isWidget ) {
   872         if ( isWidget ) {
   873             parent = static_cast<QGraphicsWidget *>( parentObj );
   873             parent = static_cast<QGraphicsWidget *>( parentObj );
   874         }
   874         }
   875     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
   875     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
   876         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
   876         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
   877     }
   877     }
   878     if ( !parent ) {
   878     if ( !parent ) {
   879         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: PARENT NOT FOUND" ) );
   879         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: PARENT NOT FOUND" ) );
   880         return false;
   880         return false;
   881     }
   881     }
   917     }
   917     }
   918 
   918 
   919     if ( itemname.isEmpty() ) {
   919     if ( itemname.isEmpty() ) {
   920         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: TRY TO ADD EMPTY ITEM " ) + itemname );
   920         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: TRY TO ADD EMPTY ITEM " ) + itemname );
   921         return false;
   921         return false;
   922     } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].second == HbXml::WIDGET ) {
   922     } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].mType == HbXml::WIDGET ) {
   923         item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].first.data() );
   923         item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].mObject.data() );
   924     } else {
   924     } else {
   925         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: NO SUCH ITEM " ) + itemname );
   925         HB_DOCUMENTLOADER_PRINT( QString( "LINEARLAYOUT: NO SUCH ITEM " ) + itemname );
   926         return false;
   926         return false;
   927     }
   927     }
   928 
   928 
  1013         bool isWidget = false;
  1013         bool isWidget = false;
  1014         QObject *parentObj = findFromStack( &isWidget );
  1014         QObject *parentObj = findFromStack( &isWidget );
  1015         if( isWidget ) {
  1015         if( isWidget ) {
  1016             parent = static_cast<QGraphicsWidget *>( parentObj );
  1016             parent = static_cast<QGraphicsWidget *>( parentObj );
  1017         }
  1017         }
  1018     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
  1018     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
  1019         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
  1019         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
  1020     }
  1020     }
  1021     if ( !parent ) {
  1021     if ( !parent ) {
  1022         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: PARENT NOT FOUND" ) );
  1022         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: PARENT NOT FOUND" ) );
  1023         return false;
  1023         return false;
  1024     }
  1024     }
  1042     }
  1042     }
  1043 
  1043 
  1044     if( itemname.isEmpty() ) {
  1044     if( itemname.isEmpty() ) {
  1045         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: TRY TO ADD EMPTY ITEM " ) + itemname );
  1045         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: TRY TO ADD EMPTY ITEM " ) + itemname );
  1046         return false;
  1046         return false;
  1047     } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].second == HbXml::WIDGET ) {
  1047     } else if ( mObjectMap.contains( itemname ) && mObjectMap[ itemname ].mType == HbXml::WIDGET ) {
  1048         item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].first.data() );
  1048         item = static_cast<QGraphicsWidget *>( mObjectMap[ itemname ].mObject.data() );
  1049     } else {
  1049     } else {
  1050         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: NO SUCH ITEM " ) + itemname );
  1050         HB_DOCUMENTLOADER_PRINT( QString( "STACKEDLAYOUT: NO SUCH ITEM " ) + itemname );
  1051         return false;
  1051         return false;
  1052     }
  1052     }
  1053 
  1053 
  1066         bool isWidget = false;
  1066         bool isWidget = false;
  1067         QObject *parentObj = findFromStack( &isWidget );
  1067         QObject *parentObj = findFromStack( &isWidget );
  1068         if( isWidget ) {
  1068         if( isWidget ) {
  1069             parent = static_cast<QGraphicsWidget *>( parentObj );
  1069             parent = static_cast<QGraphicsWidget *>( parentObj );
  1070         }
  1070         }
  1071     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].second == HbXml::WIDGET ) {
  1071     } else if ( mObjectMap.contains( widget ) && mObjectMap[ widget ].mType == HbXml::WIDGET ) {
  1072         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].first.data() );
  1072         parent = static_cast<QGraphicsWidget *>( mObjectMap[ widget ].mObject.data() );
  1073     }
  1073     }
  1074     if ( !parent ) {
  1074     if ( !parent ) {
  1075         HB_DOCUMENTLOADER_PRINT( QString( "NULL LAYOUT: PARENT NOT FOUND" ) );
  1075         HB_DOCUMENTLOADER_PRINT( QString( "NULL LAYOUT: PARENT NOT FOUND" ) );
  1076         return false;
  1076         return false;
  1077     }
  1077     }
  1085 }
  1085 }
  1086 
  1086 
  1087 bool HbDocumentLoaderActions::setWidgetRole(
  1087 bool HbDocumentLoaderActions::setWidgetRole(
  1088     QGraphicsWidget *parent, QGraphicsWidget *child, const QString &role)
  1088     QGraphicsWidget *parent, QGraphicsWidget *child, const QString &role)
  1089 {
  1089 {
  1090     return mFactory.setWidgetRole(parent, child, role);
  1090     bool roleTransfersOwnership = false; 
       
  1091 
       
  1092     // updates roleTransfersOwnership only on succesfull execution
       
  1093     const bool result = mFactory.setWidgetRole(parent, child, role, roleTransfersOwnership);
       
  1094 
       
  1095     if ( roleTransfersOwnership ) {
       
  1096         // remove ownership from own data structure    
       
  1097         ObjectMapItem &item = mObjectMap[child->objectName()];
       
  1098         item.mOwned = false;
       
  1099     }
       
  1100 
       
  1101     return result;
  1091 }
  1102 }
  1092 
  1103 
  1093 bool HbDocumentLoaderActions::setObjectRole(
  1104 bool HbDocumentLoaderActions::setObjectRole(
  1094     QObject *parent, QObject *child, const QString &role)
  1105     QObject *parent, QObject *child, const QString &role)
  1095 {
  1106 {