Ejemplo n.º 1
0
QUrl MakeJob::workingDirectory() const
{
    ProjectBaseItem* it = item();
    if(!it)
        return QUrl();

    KDevelop::IBuildSystemManager *bldMan = it->project()->buildSystemManager();
    if( bldMan )
        return bldMan->buildDirectory( it ).toUrl(); // the correct build dir
    else
    {
        // Just build in-source, where the build directory equals the one with particular target/source.
        for( ProjectBaseItem* item = it; item; item = item->parent() ) {
            switch( item->type() ) {
            case KDevelop::ProjectBaseItem::Folder:
            case KDevelop::ProjectBaseItem::BuildFolder:
                return static_cast<KDevelop::ProjectFolderItem*>(item)->path().toUrl();
                break;
            case KDevelop::ProjectBaseItem::Target:
            case KDevelop::ProjectBaseItem::File:
                break;
            }
        }
        return QUrl();
    }
}
Ejemplo n.º 2
0
    /**
    * Find sub-project represented by @param item in the projects DOM document.
    * This will return the root-node (i.e. documentElement) if sub-project
    * is not found.
    * @param item - the ProjectFolderItem representing the sub-project
    * @param name - the value of the name attribute of the element to look for
    * @return a QDomElement representing @param item in the DOM document or the document element
    */
    QDomElement findElementInDocument( ProjectBaseItem *item, const QString &name )
    {
        QStack<QString> domPath;
        domPath.push( name );
        #if KDEV_PLUGIN_VERSION >= 10
        if (!item->parent()) {
            //this must be the project root
            return projectDomDocument.documentElement();
        }
        ProjectBaseItem *wItem = item;
        while ((wItem = wItem->parent())){
            if (wItem->folder())
                domPath.push( wItem->folder()->folderName() );
        };
        //remove last element, because it’s the root element, we don’t want to find that
        domPath.pop();
        #else
        // for older kdevplatform versions
        //TODO: can this be done without dynamic_cast?
        ProjectFolderItem *wItem = dynamic_cast<ProjectFolderItem*>( item->parent() );
        if (!wItem) {
             //this must be the project root
             return projectDomDocument.documentElement();
         }
        while (!wItem->isProjectRoot()){
            domPath.push( wItem->folderName() );
            //TODO: can this be done without dynamic_cast?
            wItem = dynamic_cast<ProjectFolderItem*>( wItem->parent() );
         };
        #endif

        QDomElement child = projectDomDocument.documentElement();
        while ( !domPath.isEmpty() ){
            QString nextFolder = domPath.pop();
            QDomElement d = child.firstChildElement("item");
            while (!d.isNull() && d.attribute("name") != nextFolder){
                if (d.attribute("name") == ""){
                    kWarning() << "no, this shouldn't happen";
                    return QDomElement();
                }
                d = d.nextSiblingElement("item");
            }
            child = d;
        }
        return child;
    }